Neo4j中的节点合并

Neo4j中的节点合并,neo4j,cypher,Neo4j,Cypher,我正在尝试使用CYPHER合并两个neo4j图。第一个是国家及其首都的例子。第二个是我创建的示例 WITH "https://gist.githubusercontent.com/jimmycrequer/7aa867900d0cf0b9588d4354f09cb286/raw/countries.json" AS url CALL apoc.load.json(url) YIELD value AS v MERGE (c:Country {name: v.name}) SE

我正在尝试使用CYPHER合并两个neo4j图。第一个是国家及其首都的例子。第二个是我创建的示例

WITH "https://gist.githubusercontent.com/jimmycrequer/7aa867900d0cf0b9588d4354f09cb286/raw/countries.json" AS url
CALL apoc.load.json(url) YIELD value AS v
MERGE (c:Country {name: v.name})
SET c.population = v.population, c.area = v.area
CREATE (capital:City {name: v.capital})
CREATE (c)<-[:IS_CAPITAL_OF]-(capital)
FOREACH (n IN v.neighbors |
  MERGE (neighbor:Country {name: n})
  MERGE (c)-[:IS_NEIGHBOR_OF]-(neighbor)
)
节点具有以下属性

id:103, area:357022, name:Germany, population:8288000

然后,我尝试查找最终输出。我看到为关系[:MANUFACTURERS]创建了一个空节点,并且创建了一个节点
BMW

稍微更改一下您的第二个查询。仅仅因为您将节点变量命名为Germany,Neo4j不知道您想要将国家与名称属性Germany匹配

在大多数情况下,您应该首先合并或匹配节点,然后才在两者之间添加tje关系

MERGE (BMW:Manufacturer {name:"BMW" , headquarters :"Germany" , employees :100306,factories:25 ,revenue:95.8 ,production:1668982 ,sales: 1688982 })
MERGE (Germany:Country{name:'Germany})
MERGE (Germany)-[:MANUFACTURERS]->(BMW)

谢谢,成功了。但是,通常情况下,匹配第一项不应该足够吗?即节点变量匹配?如果在同一查询中运行它,则为是,否则为否
MERGE (BMW:Manufacturer {name:"BMW" , headquarters :"Germany" , employees :100306,factories:25 ,revenue:95.8 ,production:1668982 ,sales: 1688982 })
MERGE (Germany:Country{name:'Germany})
MERGE (Germany)-[:MANUFACTURERS]->(BMW)