Neo4j create graph that some nodes have more than one relationships

给你一囗甜甜゛ 提交于 2019-12-24 21:05:57

问题


Over my Neo4j I want to create this graph:

SO I tried to create some nodes and relationships with:

MERGE (D:POINT {NAME:'d'})<-[:LINKS]-(A:POINT {NAME:'a'})-[:LINKS]->(B:POINT {NAME:'b'})-[:LINKS]->(C:POINT {NAME:'c'})

But I cannot find out how I will create the relationships between D and B points also I cannot find out how I will link the A and C as well.

Do you have any Idea how to do that?


回答1:


In order to avoid unintentionally creating duplicate nodes and/or relationships, you must invoke MERGE on individual nodes and relationships.

To quote the dev manual:

When using MERGE on full patterns, the behavior is that either the whole pattern matches, or the whole pattern is created. MERGE will not partially use existing patterns — it’s all or nothing. If partial matches are needed, this can be accomplished by splitting a pattern up into multiple MERGE clauses.

For example, to properly create your graph without any duplicate nodes or relationships:

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)



回答2:


CREATE seems to be the natural way to me for creating nodes and relationships.

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)



回答3:


You can do it by doing a MATCH before a MERGE eg. FOR the relationship between A and D do:

MATCH (A:POINT {NAME:'a'}),(B:POINT {NAME:'d'}) MERGE (A)-[:LINKS]->(B)


来源:https://stackoverflow.com/questions/48312314/neo4j-create-graph-that-some-nodes-have-more-than-one-relationships

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!