【发布时间】:2017-07-10 13:06:43
【问题描述】:
在图中,有3个顶点A、B、C,它们都用边E连接到顶点D。现在我有A B C,如何用gremlin查询来查询它们的共同尾顶点D?
【问题讨论】:
在图中,有3个顶点A、B、C,它们都用边E连接到顶点D。现在我有A B C,如何用gremlin查询来查询它们的共同尾顶点D?
【问题讨论】:
这是一种可行的方法 - 请注意,我添加了一个与 A、B 和 C 不同的 E 顶点:
gremlin> g.addV(id,'A').as('a').
......1> addV(id,'B').as('b').
......2> addV(id,'C').as('c').
......3> addV(id,'D').as('d').
......4> addV(id,'E').as('e').
......5> addE('knows').from('d').to('a').
......6> addE('knows').from('d').to('b').
......7> addE('knows').from('d').to('c').
......8> addE('knows').from('e').to('a').
......9> addE('knows').from('e').to('c').iterate()
gremlin> ids = ['A','B','C']
==>A
==>B
==>C
gremlin> g.V(ids).in().
......1> where(out().id().fold().order().is(eq(ids))).
......2> dedup()
==>v[D]
where() 基本上遍历到头顶点并将它们收集到标识符列表中,然后可以将其与我们用于开始遍历的原始标识符列表进行比较。请注意,我们依赖标识符 order() 来确保列表的相等性:
gremlin> ['A','B','C'] == ['A','C','B']
==>false
【讨论】: