我试图在Neo4j数据库中找到两个顶点之间的路径,假设我的代码看起来像这样
newschool = g.addVerttex();
newschool.Title = 'A nice school';
newuser = g.addVertex();
newuser.name = 'student';
g.addEdge(newuser, g.V.filter{it.Title == 'school'}.next(), 'goesto');
如果我知道两个顶点的id,我可以找回我想要的边缘,但当然这不是动态的:
g.v(2).outE.inV.retain([g.v(1)]).back(2);
==> e[1][2-goesto->1]
然后我尝试将其更改为在工作查询上更加动态扩展:
g.V.filter{it.name == 'student'}.outE.inV.retain([g.V.filter{it.Title == 'A nice school'}]).back(2);
g.v(g.V.filter{it.name == 'student'}.id).outE.inV.retain([g.v(g.V.filter{it.Title == 'A nice school'}.id)]).back(2)
当然没有一个工作......
为什么g.V.filter{it.name =='student'}
和g.v(2)
有所不同?为什么g.V.filter{it.name == 'student'}.id
与2
不一样?
我错过了什么?我如何让它工作?
感谢。
答案 0 :(得分:2)
不要以为你在保留中迭代你的管道。请使用玩具TinkerGraph注意下面的Gremlin会话:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).out.retain([g.v(4)])
==>v[4]
gremlin> g.v(1).out.retain([g.V.filter{it.name=='josh'}])
gremlin> g.v(1).out.retain([g.V.filter{it.name=='josh'}.next()])
==>v[4]
确保在{:}中保留next()
g.V.filter{it.name == 'student'}.outE.inV.retain([g.V.filter{it.Title == 'A nice school'}.next()]).back(2)
答案 1 :(得分:1)
g.v(1).out.loop(1){it.object != g.v(2)}.path
英文:
“从顶点1开始,在您到达的对象不是顶点的情况下遍历外边缘。返回路径。”
有关此类模式的详情,请参阅http://gremlindocs.com。