CosmosDB 上的 Gremlin - 删除并重新创建顶点的属性,而不删除顶点



我正在尝试在分区的CosmosDB 图形中的顶点上设置属性。 如果顶点以前有任何属性,我希望将它们清理并替换为新的属性集。

甚至删除也有点棘手,因为"分区键"作为不可删除的属性公开。

g.V('nodeId').has('partitionKey','xx').properties().drop()

-> "Gremlin 查询执行错误:无法删除分区属性。

幸运的是,分区键属性的id是可预测的,可用于筛选出它:

g.V('nodeId').has('partitionKey','xx')
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()

现在我被困在尝试添加新属性时。我试过了:

g.V('nodeId').has('partitionKey','xx')
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()
.property('a','valA')
.property('b','valB')

但这看起来我正在将property()步骤应用于(空(属性列表,而不是顶点。 该错误不是很有帮助:

Gremlin Query Compilation Error: Column reference R_200324["_value"] cannot be located in the raw records in the current execution pipeline.

我尝试使用将property()步骤应用于顶点(通过select-ing 它(,但我一定做错了什么:

g.V('nodeId').has('partitionKey','xx')
.as('v') 
.properties().not(has('id', 'nodeId|partitionKey'))
.drop()
.select('v')
.property('a','valA')
.property('b','valB')

这给出了与上述相同的错误。

我也尝试了.back('v')而不是.select('v')但看起来 CosmosDB 不支持back

有什么建议吗?

我认为您遇到了与此 S.O. 答案中描述的相同的问题。

基本上,.drop()会筛选遍历中的所有内容,并阻止以下任何代码执行任何操作。

你可以通过使用这样的.sideEffect()来解决这个问题

g.V('nodeId').has('partitionKey','xx')
.sideEffect(properties().not(has('id', 'nodeId|partitionKey')).drop())
.property('a','valA')
.property('b','valB')

最新更新