我有一组列表,列表中包含重复的项目,例如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中创建唯一节点。
假设标签只用名称来标记,这里是一个使用以下方法的工作示例。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'})