【问题标题】:Merging Nodes in Neo4jNeo4j 中的节点合并
【发布时间】:2020-09-02 09:05:59
【问题描述】:

我正在尝试使用 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)
)

为此,我正在尝试添加我的图表 //制造商

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

德国节点具有以下属性

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

什么时候,我尝试寻找最终的输出。我看到为关系 [:MANUFACTURERS] 创建了一个空的空白节点,并创建了一个节点 BMW

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    并且在大多数情况下,您应该先合并或匹配节点,然后才能在两者之间添加 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)
    

    【讨论】:

    • 感谢它的工作。但是,通常不应该匹配第一项,即节点变量匹配吗?
    • 如果你在同一个查询中运行它,那么是,否则不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多