问题
We currently use gremlin.net library in a net core 3.0 application to connect to Janusgraph db.
We need to execute below query in janusgraph
g.V('12345').outE('myedge').has('datetime',lt(1581922847)).order().by('datetime', incr).limit(100).valueMap().as('time').inV().as('user').select('time','user')
The query runs fine as long as we dont have inV() part. If we have inV(), we are facing below error,
ScriptEvaluationError: java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Edge
- Is there a way to run/rewrite this query without splitting it into two? Am new to janusgraph and this works fine in Cosmos db.
- As per stackoverflow, I understand there is a custom deserialization involved in janusgraph. I tried that, but still doesn't help me. Can someone, post a working code that adds a custom deserialization in .net core 3.0.
To have a simpler example, the query g.V(1).as('v').outE().limit(1).as('e').select('v','e') works directly in gremlin console but not with gremlin.net library(groovy-string) for janusgraph. We have tried both GRYO and GraphSON Serializer settings in server. We are in a position to use groovy-string as this is an existing application.
回答1:
The query runs fine as long as we dont have inV() part. If we have inV(), we are facing below error, ScriptEvaluationError
You can't have inV() because it follows valueMap(). inV() is meant to traverse from an Edge object to its incoming Vertex, but valueMap() converts the Edge to a Map and you thus get the error of: "java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Edge"
I think you just want:
g.V('12345').
outE('myedge').has('datetime',lt(1581922847)).
order().by('datetime', incr).
limit(100).
project('time','user').
by(valueMap()).
by(inV())
来源:https://stackoverflow.com/questions/60263542/janusgraph-using-gremlin-query-in-net-core-3-0