User12345
User12345

Reputation: 475

How to get both edge and vertex properties in gremlin titan graph database and valueMap() in java

ts1=graph.addVertex(label,"test","test_id",872)
ts2=graph.addVertex(label,"test","test_id",873)
rj1=graph.addVertex(label,"req","id1",113,"status","S")
rj2=graph.addVertex(label,"req","id1",114,"status","S")
e1=rj1.addEdge("edgeA",ts1,"seq",1)
e2=rj2.addEdge("edgeA",ts2,"seq",2)

I am able to get the following in seperate query:

g.V().hasLabel("req").has("status","S").outE("edgeA").valueMap()
==>[seq:1]
==>[seq:2]
g.V().hasLabel("job").has("status","S").outE("job_edge").inV().valueMap()
==>[test_id,872]
==>[test_id,873]

How to get both sequence and corresponding test_id in single query
updated question:

public void readTestbedJob(String tbName){
    GraphTraversalSource traversalSource = getTitanTraversalSource();
    GraphTraversal<Vertex, Map<String, Object>> query1 = traversalSource.V()
                .has("req","id1",113).valueMap();
    GraphTraversal<Vertex, Map<String, Object>> query2 = traversalSource.V().has("status","S").as("a").
            outE("edgeA").as("e").
            inV().as("v").
            select("a","e","v").by(valueMap());
}

From gremlin console: both query1 and query2 are returning results properly.

but, I am not able to use valueMap() or values() in query2 directly in java,

GraphTraversal<Vertex, Map<String, Object>> query2 = traversalSource.V().has("status","S").as("a").
            outE("edgeA").as("e").
            inV().as("v").
            select("a","e","v").by(valueMap());

1)when I use by(valueMap()) or by(values()) directly in the above query, I am getting following compilation error: undefined function valueMap()
2)Instead of by(valueMap()), by() returning only vertex id and edge id. a=v[16576],b=e[2pjpce-6eo-90r9-9ig][edgeA], c=v[8304]}
Could you please help me to resolve this problem. I am not able identify how to use by(valueMap()) in Java.

Upvotes: 2

Views: 6529

Answers (1)

stephen mallette
stephen mallette

Reputation: 46206

You could use select():

gremlin> g.V().has("job_status","S").
......1>   outE("edgeA").as('e').
......2>   inV().as('v').
......3>   select('e','v').by(valueMap())
==>[e:[sequence:1],v:[test_suite_id:[872]]]
==>[e:[sequence:2],v:[test_suite_id:[873]]]

Upvotes: 10

Related Questions