Azure cosmosdb 查找被遍历图的常见相关顶点

Azure cosmosdb 查找被遍历图的常见相关顶点,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,给出这个图表 g.addV("1").property(id,'a').as('a'). addV("2").property(id,'b').as('b'). addV("3").property(id,'c').as('c'). addE('related').from('a').to('b'). addE('related').from('a').to('c'). addE('related').from('b

给出这个图表

g.addV("1").property(id,'a').as('a').
  addV("2").property(id,'b').as('b').
  addV("3").property(id,'c').as('c').
  addE('related').from('a').to('b').
  addE('related').from('a').to('c').
  addE('related').from('b').to('c')

如果选择了1和2

g.V().hasLabel("1", "2").has("id", within("a","b"))
我想获得“一般”相关节点,只需执行以下操作:

g.V().hasLabel("1", "2").has("id", within("a","b")).out()
不会削减它,因为它将给我2和3(当只打算3) 此外,如果2和3不相关,则不应显示3作为结果,因为并非“选择”的所有节点都与3相关


有什么好方法可以做到这一点吗?

下面是一个使用
groupCount
的示例。请注意,这假定在同一方向上的任何两个相邻顶点之间没有平行边

gremlin> g.addV("1").property(id,'a').as('a').
......1>   addV("2").property(id,'b').as('b').
......2>   addV("3").property(id,'c').as('c').
......3>   addE('related').from('a').to('b').
......4>   addE('related').from('a').to('c').
......5>   addE('related').from('b').to('c')
==>e[2][b-related->c]

gremlin> g.V().hasLabel('1','2').out()
==>v[b]
==>v[c]
==>v[c]

gremlin> g.V().hasLabel('1','2').out().groupCount()
==>[v[b]:1,v[c]:2]

gremlin> g.V().hasLabel('1','2').out().groupCount().unfold().where(select(values).is(2))
==>v[c]=2

gremlin> g.V().hasLabel('1','2').out().groupCount().unfold().where(select(values).is(2)).select(keys)
==>v[c]              

    

根据实际图形的复杂性,一个简单的解决方案是
groupCount
可以从起始集中访问的节点,如果计数与起始集中的节点数不同,则拒绝它们。如果这在您的案例中听起来有用的话,我可以提供一个示例。我继续添加了一个使用
groupCount
的示例。这是一个很好的解决方案,我尝试着不跟踪数字,而是让查询本身通过说:
g.V(“id1”,“id2”).as('result').out().groupCount().unfold().where(选择(values).is(select('result').count()).select(keys)
但这似乎不是前进的方向,您有什么建议来解决这个问题吗?