在我的Neo4j上我想创建这个图:
所以我尝试用以下方法创建一些节点和关系:
MERGE (D:POINT {NAME:'d'})<-[:LINKS]-(A:POINT {NAME:'a'})-[:LINKS]->(B:POINT {NAME:'b'})-[:LINKS]->(C:POINT {NAME:'c'})
但我无法了解如何创建D
和B
点之间的关系,我也无法了解如何将A
和C
联系起来。
你有什么想法怎么做?
答案 0 :(得分:1)
为了避免无意中创建重复的节点和/或关系,您必须在各个节点和关系上调用MERGE
。
引用dev manual:
在完整模式上使用MERGE时,行为就是 整个模式匹配,或创建整个模式。 MERGE不会 部分使用现有的模式 - 它是全有或全无。如果偏 需要匹配,这可以通过拆分模式来完成 进入多个MERGE条款。
例如,要正确创建没有任何重复节点或关系的图形,请执行以下操作:
MERGE (A:POINT {NAME:'a'})
MERGE (B:POINT {NAME:'b'})
MERGE (C:POINT {NAME:'c'})
MERGE (D:POINT {NAME:'d'})
MERGE (A)-[:LINKS]->(B)
MERGE (A)-[:LINKS]->(C)
MERGE (A)-[:LINKS]->(D)
MERGE (B)-[:LINKS]->(C)
MERGE (D)-[:LINKS]->(B)
答案 1 :(得分:1)
CREATE
似乎是我创建节点和关系的自然方式。
CREATE (D:POINT {NAME:'d'})<-[:LINKS]-(A:POINT {NAME:'a'})
, (A)-[:LINKS]->(B:POINT {NAME:'b'})<-[:LINKS]-(D)
, (B)-[:LINKS]->(C:POINT {NAME:'c'})<-[:LINKS]-(A)
答案 2 :(得分:0)
您可以在MATCH
之前执行MERGE
,例如。对于A
和D
之间的关系,请执行:
MATCH (A:POINT {NAME:'a'}),(B:POINT {NAME:'d'}) MERGE (A)-[:LINKS]->(B)