【问题标题】:how to create relation between existing two node, I'm using neo4j.如何在现有的两个节点之间创建关系,我使用的是 neo4j。
【发布时间】:2015-12-09 02:30:31
【问题描述】:

我正在启动 neo4j,我正在使用 python3.5 和 py2neo。

我使用以下代码构建了两个图形节点。并成功创建。[!

>>> u1 = Node("Person",name='Tom',id=1)
>>> u2 = Node('Person', name='Jerry', id=2)
>>> graph.create(u1,u2)

之后,我将在“Tom”和“Jerry”之间建立关系 Tom 的 id 属性为 1,Jerry 的 id 属性为 2。

所以。我想,我必须使用 id 属性指向现有的两个节点。 然后我尝试创建如下关系。

>>> u1 = Node("Person",id=1)
>>> u2 = Node("Person",id=2)
>>> u1_knows_u2=Relationship(u1, 'KKNOWS', u2)
>>> graph.create(u1_knows_u2)

以上成功执行。但是图表有点奇怪。

我不知道为什么会创建未知的图形节点。以及为什么在未知的两个节点之间创建关系。

【问题讨论】:

    标签: python neo4j py2neo


    【解决方案1】:

    您可以拥有两个具有相同标签和相同属性的节点。您使用u1 = Node("Person",id=1) 获得的第二个节点与您之前创建的节点不同。这是一个具有相同标签/属性的新节点。

    当您定义两个节点(即您的新 u1u2)并在它们之间创建关系时,将创建整个模式。

    要获取两个节点并在它们之间创建关系,您可以:

    # create Tom and Jerry as before
    u1 = Node("Person",name='Tom',id=1)
    u2 = Node('Person', name='Jerry', id=2)
    graph.create(u1,u2)
    
    # either use u1 and u2 directly
    u1_knows_u2 = Relationship(u1, 'KKNOWS', u2)
    graph.create(u1_knows_u2)
    
    # or find existing nodes and create a relationship between them
    existing_u1 = graph.find_one('Person', property_key='id', property_value=1)
    existing_u2 = graph.find_one('Person', property_key='id', property_value=2)
    
    existing_u1_knows_u2 = Relationship(existing_u1, 'KKNOWS', existing_u2)
    graph.create(existing_u1_knows_u2)
    

    find_one() 假定您的 id 属性是唯一的。

    【讨论】:

      【解决方案2】:

      另请注意,您可以将 Cypher 查询语言与 Py2neo 一起使用:

      graph.cypher.execute('''
         MERGE (tom:Person {name: "Tom"})
         MERGE (jerry:Person {name: "Jerry"})
         CREATE UNIQUE (tom)-[:KNOWS]->(jerry)
      ''')
      

      Cypher 中的MERGE 语句类似于“获取或创建”。如果具有给定名称“Tom”的Person 节点已经存在,它将绑定到变量tom,否则将创建该节点然后绑定到tom。这与添加 uniqueness constraints 相结合可以避免不需要的重复节点。

      【讨论】:

        【解决方案3】:

        检查此查询,

        MATCH (a),(b) WHERE id(a) =1 and id(b) = 2 create (a)-[r:KKNOWS]->(b) RETURN a, b
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多