Gremlin:是否可以过滤可选属性? (图数据库是海王星)

时间:2019-03-18 19:26:17

标签: gremlin amazon-neptune

我有一个具有单个顶点的图:

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()”等效的东西。

任何建议都非常感谢!

乔尔

1 个答案:

答案 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()