我是Ne04j的新手,我必须针对以下情况编写一个密码查询
使用 data1 删除用户的 NEXT 关系。
从用户到 data2 创建 NEXT 关系。
从 data2 到 data1 创建 NEXT 关系。
问题在于 Possiblity 1,我无法删除关系,同时create
关系。
我尝试了以下查询,但失败了
match (a:user{id:12345})
optional match (a)-[r:NEXT]->(b:data)
delete r
create unique (a)-[:NEXT]->(c:data{id:1})-[:NEXT]->(b)
with a
create unique (a)-[:NEXT]->(c:data{id:2})
请帮助,提前致谢
答案 0 :(得分:1)
使用下面的密码查询。
MATCH (a:user {id: "12345"})
WITH a
MERGE (a)-[:NEXT]->(c:data {id: "2"})
WITH a,c
MATCH (a)-[r:NEXT]->(b:data)
WHERE b<>c
WITH a, collect(r) AS rels, collect(b) AS bs, c
FOREACH (t IN range(0,length(rels)-1)|
FOREACH (t1 IN [bs[t]]|
FOREACH (t2 IN [rels[t]]|
MERGE c-[:NEXT]->t1
DELETE t2)))
RETURN a,c
上述查询将创建与node a
和数据node c
与id: "2"
的新关系,如果之前连接的任何其他数据类型节点将在新node c
之后追加
答案 1 :(得分:1)
最后,我找到了解决方案。我不确定这个查询是否完美,但是这个工作只需几毫秒就可以执行。
我发布这个答案是为了帮助其他人有同样的怀疑
MATCH (a:user{id:12345})
MERGE (a)-[r:NEXT]->(b:data)
ON CREATE SET b.id=1
with a,r,b
match (a)-[r]->(b)
where b.id<>1
CREATE (a)-[k:NEXT]->(c:data{id:1})-[m:NEXT]->(b)
delete r
希望这有帮助,谢谢