如果使用cypher不存在,则在节点之间创建关联

Ama*_*ddy 7 neo4j cypher

假设有2个标签P和M. M具有名称为M1,M2,M3..M10的节点.我需要将P的50个节点与M的每个节点相关联.标签P的节点也不应该与M的节点有2个关联.

这是我可以提出的密码查询,但似乎不起作用.

MATCH (u:P), (r:M{Name:'M1'}),(s:M) 
where not (s)-[:OWNS]->(u) 
with u limit 50 
CREATE (r)-[:OWNS]->(u);
Run Code Online (Sandbox Code Playgroud)

这样我就可以运行M的所有10个节点.任何帮助纠正查询都是值得赞赏的.

Tom*_*nič 5

您可以使用apoc.periodic.*库进行批处理.更多信息在文档中

call apoc.periodic.commit("
MATCH (u:P), (r:M{Name:'M1'}),(s:M) where not (s)-[:OWNS]->(u) 
with u,r limit {limit}
CREATE (r)-[:OWNS]->(u)
RETURN count(*)
",{limit:10000})
Run Code Online (Sandbox Code Playgroud)

如果总是只有一个(r)-[:OWNS]->(u)关系,我会改变我的第一场比赛

call apoc.periodic.commit("
MATCH (u:P), (r:M{Name:'M1'}),(s:M) where not (s)-[:OWNS]->(u) and not (r)-[:OWNS]->(u)
with u,r limit {limit}
CREATE (r)-[:OWNS]->(u)
RETURN count(*)
",{limit:10000})
Run Code Online (Sandbox Code Playgroud)

因此,程序无法进入循环


Ama*_*ddy 3

这对我有用。

MATCH (u:P), (r:M{Name:'M1'}),(s:M) 
where not (s)-[:OWNS]->(u) 
with u,r limit 50 
CREATE (r)-[:OWNS]->(u);
Run Code Online (Sandbox Code Playgroud)

感谢 Thomas 提到对 u 和 r 的限制。