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)
但这似乎不是前进的方向,您有什么建议来解决这个问题吗?