Gremlin中类似Java Optional::orElseGet的按需创建属性查询实现
实现Gremlin按需创建属性的查询逻辑(类似Optional::orElseGet)
针对你需要的"属性不存在则创建,存在则直接操作"的需求,结合远程图环境(无法访问Graph对象),可以用Gremlin的choose分支遍历实现,具体查询语句如下:
g.V(id) .choose( __.properties("propertyWithMetaProps").hasValue(1).count().is(0), __.property(list, "propertyWithMetaProps", 1), __.properties("propertyWithMetaProps").hasValue(1) ) .property("key", "value")
逻辑说明
- 条件判断:通过
__.properties("propertyWithMetaProps").hasValue(1).count().is(0)检查值为1的目标属性是否存在,数量为0则判定为不存在 - 分支执行:
- 不存在时:用
__.property(list, "propertyWithMetaProps", 1)创建指定cardinality为list的属性 - 存在时:直接选中已有的目标属性
- 不存在时:用
- 统一操作:无论分支走向如何,后续的
.property("key", "value")都会对目标属性(新创建或已存在的)添加元属性
注意事项
- 因为是远程图环境,全程使用Gremlin遍历器的内置步骤实现,不依赖任何需要直接访问Graph对象的操作
- 针对list类型的属性,创建时必须显式指定
listcardinality,避免使用默认规则导致属性类型不符合预期
内容的提问来源于stack exchange,提问作者Zonko
相关产品推荐
相关产品推荐

