使用Gremlin在Neo4j中找到两个顶点之间的路径

时间:2013-04-16 19:17:47

标签: neo4j gremlin

我试图在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'}.id2不一样?

我错过了什么?我如何让它工作?

感谢。

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