gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:34:35 24 4
gpt4 key购买 nike

我需要编写一个可以设置顶点的新属性值的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com