gpt4 book ai didi

neo4j - 删除旧关系并在同一查询中创建具有相同标签的新关系

转载 作者:行者123 更新时间:2023-12-04 19:51:09 24 4
gpt4 key购买 nike

让我们假设 PersonCar 节点。

我希望在同一个密码查询中删除所有关系APerson-[:OWNS]-SomeCar 并插入新关系。

基本上我试过这个查询:

MATCH (p:Person {_id: {personId}})
WITH p
MATCH (c:Car)
WITH p, c
MATCH p-[r:OWNS]->c
DELETE r //deleting all "old" relationships
WITH c //a with is expected here by cypher syntax => dummy value that shouldn't impact the remaining of the query
MATCH (p:Person {_id: {personId}}), (c:Car)
WHERE c._id IN {cars}
WITH p, c
MERGE p-[:OWNS]->c //merge new ones

传递给查询的参数:carspersonId

但是,它的结果是没有添加新的关系。就好像删除发生在合并之后,因此完全删除了所有关系。

有什么方法可以在同一个查询中做到这一点?

最佳答案

[更新]

这个查询是否符合您的要求?

MATCH (p:Person {_id: {personId}})
OPTIONAL MATCH (p)-[r:OWNS]->(:Car)
DELETE r
WITH p
MATCH (c:Car)
WHERE c._id IN {cars}
MERGE p-[:OWNS]->c;

此查询使用 OPTIONAL MATCH允许处理整个查询,即使不存在 OWNS关系。 (如果找不到匹配项,非可选的 MATCH 子句将中止整个查询。)

它还重新使用匹配的 Person节点以避免第二次匹配尝试。

此外,我的查询指定唯一需要的 WITH条款。写入子句(如 DELETE )后不能跟读子句(如 MATCH ),除非有 WITH 。它们之间的子句。

关于neo4j - 删除旧关系并在同一查询中创建具有相同标签的新关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com