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()
。
我有一个只有一个顶点的图:
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()
。