Gremlin 选择性遍历

Gremlin selective traversal

这可能是菜鸟 Gremlin 的问题:

假设我有这张图

A [知道--->] B

A [知道--->] C

D [知道--->] C

我想遍历这个图并找到只有 A 知道的节点,在这种情况下是 B 而不是 C,因为 A 和 D 都知道 C。有没有办法用 Gremlin 做到这一点?

编辑: 抱歉,我最初应该在问题中更明确 传入边的数量实际上可以是可变的。

g.addV('A').as('a')
  .addV('B').as('b')
  .addV('C').as('c')
  .addV('D').as('d')
  .addV('E').as('e')
  .addV('F')as('f')
  .addE('knows').from('a').to('c')
  .addE('knows').from('b').to('c')
  .addE('knows').from('a').to('f')
  .addE('knows').from('b').to('f')
  .addE('knows').from('d').to('f')

在这种情况下,我只想要 C 而不是 F,因为 A 和 B 都知道 C 和 F,但 D 也知道 F,所以我不需要 F。

有一个小样本图会很有帮助。这是符合您问题的一个。

g.addV('A').as('a').
  addV('B').as('b').
  addV('C').as('c').
  addV('D').as('d').
  addE('knows').from('a').to('b').
  addE('knows').from('a').to('c').
  addE('knows').from('d').to('c')    

使用该图查找 A 独有的朋友的查询可以写成

gremlin> g.V().hasLabel('A').
               out('knows').
               filter(__.in('knows').count().is(1)).
               path().
               by(label)  

==>[A,B] 

根据更新的问题进行编辑。

好的,考虑到额外的标准,我相信这可以满足您的需求

gremlin>  g.V().hasLabel('A','B').
......1>        out().
......2>        groupCount().
......3>        unfold().
......4>        filter(select(values).is(2)).
......5>        select(keys).
......6>        where(__.in('knows').count().is(2)).
......7>        label()  

==>C