示例数据:TinkerPop Modern
总结:我想找到创建了2个软件的人。
我从基础开始,并正确计算了
g.V().hasLabel("Person").as("from" ,"to1" )
.repeat(bothE().as("e1").otherV().as("to1").dedup("from", "to1")).times(1)
.emit(filter(hasLabel("Software"))).hasLabel("Software")
.group().by(select("from").by("name")).by(count()).as("c")
结果:
>> {'Marko': 1, 'Peter': 1, 'Josh': 2}
所以我尝试应用过滤器,但它不起作用(即结果不正确),我尝试过:
g.V().hasLabel("Person").as("from")
.repeat(bothE().as("e1").otherV().as("to1").dedup("from", "to1")).times(1)
.filter(bothE().otherV().hasLabel("Software").count(local).is(eq(1)))
.dedup()
.values("name")
知道我做错了什么吗?
示例数据:
答案 0 :(得分:1)
如果您只是需要通过边缘计数的“人”顶点,我真的不明白为什么您需要所有repeat()
基础设施。它只是:
gremlin> g.V().hasLabel('person').
......1> filter(outE('created').limit(2).count().is(2))
==>v[4]
您只需计算传出边缘,因为架构是“创建”标签仅连接到“软件”,因此您无需检查
“软件”顶点标签。您limit(2)
尽快退出边缘迭代但不是在您尝试计算的2条边之前。