我有一个具有单个顶点的图:
gremlin> g.V()。valueMap(true)
==> {id = a,x = [foo],label = vertex}
可以在以下查询中找到顶点:
gremlin> g.V()。has('x','foo')
==> v [a]
但是,我想用附加的匹配约束来修改上面的查询:如果顶点没有属性“ y”,或者顶点确实具有属性“ y”和属性“ y”的值,则匹配顶点等于“酒吧”。
我构造了以下查询。
g.V()。has('x','foo')。or(__。hasNot('y'),__。has('y','bar'))
查询不返回匹配的顶点。因此,我认为我正在寻找与mysql中的“ IFNULL()”等效的东西。
任何建议都非常感谢!
乔尔
答案 0 :(得分:1)
您的or()
过滤器没什么问题,它应该可以正常工作。
gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property(id, 'a').property('x', 'foo').iterate()
gremlin> g.V().has('x', 'foo').or(__.hasNot('y'), __.has('y', 'bar'))
==>v[a]
或者,您可以检查是否没有y
之外的bar
值。
gremlin> g.V().has('x', 'foo').not(__.values('y').is(neq('bar')))
==>v[a]
但是,双重否定往往会造成混淆,因此我只想使用or()
。