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

时间:2018-05-14 12:20:28

标签: azure-cosmosdb graph-databases gremlin tinkerpop3

我正在尝试在分区 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 - ),但我一定做错了:

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为您遇到了this S.O. answer中所述的相同问题。

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

您可以使用.sideEffect()来解决此问题

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