1

我试图在 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

我错过了什么?我怎样才能让它工作?

谢谢。

4

2 回答 2

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)
于 2013-04-19T00:28:57.967 回答
1
g.v(1).out.loop(1){it.object != g.v(2)}.path

用英语讲:

“从顶点 1 开始,在到达的对象不是顶点 2 时遍历出边。返回路径。”

有关此类模式的更多信息,请参阅http://gremlindocs.com

于 2013-04-16T22:46:22.103 回答