【问题标题】:Neo4J - Creating Relationship on existing nodesNeo4J - 在现有节点上创建关系
【发布时间】:2016-05-01 03:50:07
【问题描述】:

我是 Neo4J 的新手,我希望在现有节点和新节点之间建立新的关系。

我有一个大学节点和一个人节点。

我正在尝试为现有大学分配一个新人。

我正在尝试以下代码:

MATCH (p:Person {name:'Nick'}), (u:University {title:'Exeter'}) CREATE (p)-[:LIKES]->(u)

所以在上面的代码中:MATCH (p:Person {name:'Nick'}) 是新用户

AND (u:University {title:'Exeter'}) 是现有的大学。

但它又回来了(no changes, no rows)

我什至尝试过没有 MATCH 部分的查询,但也没有运气。

我看过几个类似的答案,但它们似乎也不起作用。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    您还可以按照docs 使用 MERGE 语句:

    MERGE 要么匹配现有节点并绑定它们,要么创建新数据并绑定它。它就像 MATCH 和 CREATE 的组合,另外还允许您指定在匹配或创建数据时会发生什么。

    你会做这样的查询

    MERGE (p:Person {name:'Nick'})-[:LIKES]->(u:University {title:'Exeter'})
    

    【讨论】:

    • 这仅在您第一次运行时有效。在其他人的后续运行中,它将再次创建大学,因为除非整个路径已经存在,否则 MERGE 会创建整个路径。
    【解决方案2】:

    按照 cmets 的建议,在创建新之前匹配!

    MATCH(u:University {title:'Exeter'})
    CREATE(p:Person {name:'Nick'})
    CREATE(p)-[w:LIKES]->(u)
    return w
    

    【讨论】:

    • WITH 与这里无关,您的查询是正确的,但更相关的是他应该使用 CREATE 而不是 MATCH 来首先创建用户节点,切换您的 CREATE 和 MATCH 并且您不需要无论如何+1
    【解决方案3】:

    这是因为当您匹配时,您会在数据库中搜索节点。 db 说“当节点不存在时”我无法实现。

    幸运的是,有一种叫做合并的东西,当他找不到他创建它的整个路径时,它就像一个匹配 +create。 它应该类似于 merge 'node1' merge'node2' create(node1)[]->(node2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多