我一直在看Gremlin图语言,看起来非常强大。然而,在完成了根据要求对其进行评估的过程中,我遇到了一个我似乎无法完成的案例。
假设Gremlin已启动,并使用其示例数据库:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
...
gremlin> g.V.out('knows')
==>v[2]
==>v[4]
因此,这显示了具有“已知”边缘的顶点。
但是,我想找到不具有'knows'边缘的顶点。类似的东西:
gremlin> g.V.outNot('knows')
==>v[3]
==>v[5]
==>v[6]
如何找到这些顶点?
(已编辑以使输出正确)
答案 0 :(得分:4)
我用几种方式解释这个问题,但也许这就是你所追求的。一种方法是:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.V.outE.hasNot('label','knows')
==>e[9][1-created->3]
==>e[12][6-created->3]
==>e[10][4-created->5]
==>e[11][4-created->3]
gremlin> g.V.outE.hasNot('label','knows').inV
==>v[3]
==>v[3]
==>v[5]
==>v[3]
请注意,label和id都被识别为属性:
gremlin> g.V.has('id',"1")
==>v[1]
gremlin> g.E.map("label","id")
==>{id=10, label=created}
==>{id=7, label=knows}
==>{id=9, label=created}
==>{id=8, label=knows}
==>{id=11, label=created}
==>{id=12, label=created}
另一种考虑这个问题的方法是找到一个没有"知道"的顶点列表。边缘:
gremlin> g.V.filter{!it.bothE('knows').hasNext()}
==>v[3]
==>v[6]
==>v[5]
答案 1 :(得分:0)
我正在使用gremlin而不是orientdb,这对我有用;只需在边缘标签前加上'out _'
g.V.hasNot('out_knows');
答案 2 :(得分:0)
如果您正在寻找 Groovy 语法(例如,AWS Neptune 可以将其与笔记本一起使用)。您可以像这样构建查询
g.V().not(outE('filtered_relationship'))