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

Gremlin: is it possible to filter on optional properties? (graph database is Neptune)

我有一个只有一个顶点的图:

gremlin> g.V().valueMap(true)

==>{id=a, x=[foo], label=vertex}

可以在以下查询中找到顶点:

gremlin> g.V().has('x', 'foo')

==>v[a]

但是,我想用额外的匹配约束修改上面的查询:如果顶点没有 属性 "y",或者如果顶点有 [=53=,则匹配该顶点] "y" 属性 "y" 的值等于 "bar".

我构建了以下查询。

g.V().has('x', 'foo').or(__.hasNot('y'), __.has('y', 'bar'))

查询returns没有匹配的顶点。所以,我想我正在寻找等同于 mysql.

中的 "IFNULL()" 的东西

非常感谢任何建议!

乔尔

您的 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()