Graph Traversal&使用OrientDB使用Gremlin进行过滤

时间:2017-11-09 10:51:51

标签: orientdb gremlin

Group[code=a]->Choice[selected=true]
Group[code=a]->Choice[selected=false]
Group[code=a]->Choice[selected=false]
Group[code=b]->Choice[selected=false]
Group[code=b]->Choice[selected=false]
Group[code=c]->Choice[selected=false]
Group[code=c]->Choice[selected=true]

鉴于上述顶点,我正在寻找组顶点,其中一个组没有任何选择顶点,选定属性为真。

因此结果应仅返回B组

Group[code=b]

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这是您的图表 - 在询问有关Gremlin的问题时,以这种方式提供您的示例数据总是有帮助的:

graph = TinkerGraph.open()
g = graph.traversal()
g.addV('group').property('code','a').as('a').
  addV('group').property('code','b').as('b').
  addV('group').property('code','c').as('c').
  addV('choice').property('selected',true).
  addE('link').from('a').
  addV('choice').property('selected',false).
  addE('link').from('a').
  addV('choice').property('selected',false).
  addE('link').from('a').
  addV('choice').property('selected',false).
  addE('link').from('b').
  addV('choice').property('selected',false).
  addE('link').from('b').
  addV('choice').property('selected',false).
  addE('link').from('c').
  addV('choice').property('selected',true).
  addE('link').from('c').iterate()

获得所需答案的一种方法是进行这样的遍历:

gremlin> g.V().hasLabel('group').
......1>   where(__.not(out('link').has('selected',true))).
......2>   values('code')
==>b

以上答案适用于TinkerPop 3.x.在TinkerPop 2.x中,模式是相同的。你基本上会这样做:

g.V().has('label','group').filter{ it._().out('link').has('selected',true).hasNext() }