Neo4j -如何扩展标签与变量值?



我想在单个查询中更新多个节点。我有一个问题,标签更新。

WITH [
{
code: "AAA",
secondprop: "val1",
labels: [
"label1",
"label2"
]
},
{
code: "BBB",
secondprop: "val2",
labels: [
"label3",
"label4"
]
}
] as batch
UNWIND batch as row
MERGE (n:EI:EI_CURRENT{code: row.code})
ON CREATE SET n={uuid: apoc.create.uuid()}
SET n += row
WITH n as nn, apoc.text.join(row.labels,':') as labels
SET nn:labels
REMOVE nn.labels 
return nn;

在附加查询中,我使用了某种解决方法-我为每个节点添加标签作为属性labels的值,然后我试图通过apoc语句连接它们并设置为节点。

不幸的是,这个查询只为批处理中的每个节点设置一个名为labels的标签…

我也尝试使用CALL apoc.create.setLabels(nn, nn.labels),但此语句覆盖标签,而不是扩展它们(我不知道什么标签目前在节点更新,但我绝对不想覆盖它们)

是否有办法分别更新每个节点的标签?

apoc.create.addLabels代替apoc.create.setLabels:

WITH [
{
code: "AAA",
secondprop: "val1",
labels: [
"label1",
"label2"
]
},
{
code: "BBB",
secondprop: "val2",
labels: [
"label3",
"label4"
]
}
] as batch
UNWIND batch as row
MERGE (n:EI:EI_CURRENT{code: row.code})
ON CREATE SET n={uuid: apoc.create.uuid()}
SET n += row
WITH n as nn, apoc.text.join(row.labels,':') as labels
CALL apoc.create.addLabels(nn, [labels]) YIELD node return node

我用下面的查询解决了这个问题:

CALL apoc.create.setLabels(nn, labels(nn) + nn.labels)

我们只需要将已经存在的标签(labels(nn))与新创建的批处理标签合并。

最新更新