当我使用Neo4j和py2neo时,节点被重复了。

问题描述 投票:0回答:1

我有一组列表,列表中包含重复的项目,例如tag_data = ['a','b','c','d','c','a','f','b','a']等等......现在我必须使用neo4j数据库和py2neo来存储这些列表项目。所以我尝试了

graph = Graph("http://......./db/data")
graph.schema.create_uniqueness_constraint('Zigzag', 'tagName')
for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    var_tag = Node("Zigzag",tagName=tags)
    graph.create(var_tag)

当我尝试下面的代码时,我没有看到图形中的唯一性,所以我尝试使用find和find_one方法来获得唯一性。但我得到一个错误的find和find_one不是图形方法。

我参考了stackoverflow中的一些链接,我尝试了匹配和合并,但也没有用。

for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    print(var_tag)
    matcher = NodeMatcher(graph)
    m = matcher.match("Zigzag",tags).first()
    print(m,"hi")
    if m is None:
        var_tag = Node("Zigzag",tagName=tags)
        graph.create(var_tag)

合并

for i,tags in enumerate(tag_data):
    var_tag = "tag"+str(i)
    print(var_tag)                
    graph.merge("Zigzag","tagName",tags)

我如何在neo4j(4.0.3)和py2neo中创建唯一节点。

neo4j py2neo
1个回答
1
投票

假设标签只用名称来标记,这里是一个使用以下方法的工作示例。graph.merge 从py2neo。

from py2neo import Graph, Node

graph = Graph("....")

tags = ['a','b','c','d','c','a','f','b','a']
for tag in tags:
    n = Node("Zigzag", tagName=tag)  # create node object
    graph.merge(n, "Zigzag", "tagName")  # merge node into graph using Zigzag as primary label and tagName property as primary key

所以,如果一个标签为 "Zigzag "的节点和相同的 "tagName "属性已经存在,它就不会被再次创建,否则,就会创建节点。

如果你在循环的最后添加一个打印。

print(tag, n)

你会发现所有具有相同 "tagName "属性的节点 都有相同的ID。

a (_4:Zigzag {tagName: 'a'})
b (_5:Zigzag {tagName: 'b'})
c (_6:Zigzag {tagName: 'c'})
d (_7:Zigzag {tagName: 'd'})
c (_6:Zigzag {tagName: 'c'})
a (_4:Zigzag {tagName: 'a'})
f (_8:Zigzag {tagName: 'f'})
b (_5:Zigzag {tagName: 'b'})
a (_4:Zigzag {tagName: 'a'})
© www.soinside.com 2019 - 2024. All rights reserved.