Gremlin:如何克服属性空问题并编写更新某个顶点的所有属性的查询?

标签 gremlin

我需要编写一个可以设置顶点的新属性值的 Gremlin 查询。所有的属性名称都是预先知道的(在这个例子中:类型、国家、状态)。某些属性值可以为 null - 我事先不知道哪些值。查询应该适用于所有情况。例如,假设我目前有这个查询:

g.V(123).
property('Type',Type).
property('Country',Country).
property('Status',Status)
如果所有参数(类型、国家/地区、状态)值都为非空,则此查询工作正常。如果说 Country 为空,我会收到一个错误:The AddPropertyStep does not have a provided value: AddPropertyStep({key=[Country]})在这种情况下,我需要使用不同的查询来删除属性(顺便说一下,有没有更好的方法来删除属性?):
g.V(123).
property('Type',Type).
property('Status',Status).
properties('Country').drop()
是否可以编写一个可以处理空值和非空值的通用查询?我不能使用控制台或编程,只能执行一个 Gremlin 查询。
谢谢!

最佳答案

TinkerPop 不允许 null属性中的值(虽然你可能会发现一些图形数据库允许不同的语义,我想),所以你应该预先验证你的数据以确保它有一些有意义的“空值”而不是 null .如果由于某种原因你不能这样做,我想你可以使用 choose() “检查空值”的步骤:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko],age:[29]]
gremlin> age = null
gremlin> g.V().has('person','name','marko').choose(constant(age).count().is(0), properties('age').drop(),property('age',age))
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko]]
gremlin> age = 30
==>30
gremlin> g.V().has('person','name','marko').choose(constant(age).count().is(0), properties('age').drop(),property('age',age))
==>v[1]
gremlin> g.V().has('person','name','marko').valueMap()
==>[name:[marko],age:[30]]

“为空”的检查基本上只是:constant(age).count().is(0) ,它依赖于 null 的 Gremlin 语义流中的值为空并给出 count()零。它有效,但它使您的 Gremlin 可读性稍差。那可能是个好消息 DSL step如果您必须写很多,请添加。

关于Gremlin:如何克服属性空问题并编写更新某个顶点的所有属性的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55864376/

相关文章:

java - Gremlin 不区分大小写的搜索

java - 在 titan 图形数据库中使用 gremlin 服务器加载 Json

gremlin - 如何在 JanusGraph 中为特殊顶点类型创建属性

python - 有没有办法将 gremlinpython 图转换为 networkx 图

c# - 使用 Gremlin 遍历节点但在 Neo4J 的结果中包含起始节点

azure-cosmosdb - 使用 Gremlin Graph API 在 azure cosmos db 中搜索通配符或 "LIKE"

java - 如何使用 Gremlin 和 Java 查询远程 Apache Tinkerpop 图形数据库?

gremlin - 正确处理 Gremlin 中的日期操作

titan - 如何排除 gremlin titan 中的某些顶点

graph - 在 gremlin 查询中显示级别