我有一个具有列表属性的顶点,我想替换所述属性中的值并以特定格式投影结果。对于上下文,让我们假设以下数据:
g.AddV("Post").property("id", "1")
.property(list, "Tags", "gremlin")
.property(list, "Tags", "new")
我希望能够设置Tags
属性。到目前为止我已经尝试过:
g.V("1")
.sideEffect( properties("Tags").drop() )
.property(list, "Tags", "gremlin")
.property(list, "Tags", "closed")
.property(list, "Tags", "solved")
.project("Tags").By(values("Tags"))
我期望的是以下
{
"Tags": [
"gremlin",
"closed",
"solved",
]
}
但我反而得到了错误Project By: Next: The provided traverser of key "Tags" maps to nothing.
所以它看起来好像该Tags
属性被完全删除了。如果我之后进行查询
g.V("1").project("Tags").By(values("Tags"))
我得到了预期的结果:
{
"Tags": [
"gremlin",
"closed",
"solved",
]
}
所以数据肯定是变了。如果我尝试不进行投影,则结果将包含新值。
g.V("1")
.sideEffect( properties("Tags").drop() )
.property(list, "Tags", "gremlin")
.property(list, "Tags", "closed")
.property(list, "Tags", "solved")
导致:
{
"id": "1",
"label": "Post",
"type": "vertex",
"properties": {
"Tags": [
{
"id": "4eaf5599-511c-4245-aaf8-15c828073fac",
"value": "gremlin"
},
{
"id": "75e3ad96-a503-4608-a675-e28f3ffc2ab4",
"value": "closed"
},
{
"id": "aea1a33c-bd8e-47bb-b294-f01db8642db5",
"value": "solved"
},
]
}
}
但这让我无法预测结果。
我如何才能更新数据并对其进行投影?
我尝试过的其他事情:
barrier()
在步骤之后添加drop()
步骤,没有用barrier()
在步骤之后添加sideEffect()
步骤,没有用barrier()
在步骤之前添加一个步骤project()
,没有用- 与上述三个相同,但
.fold().unfold()
相反,没有用 project()
将步骤替换为optional(g.V("1").project("Tags").by(values("Tags")))
- 这一步通过重新获取顶点来工作,但成本很高。