当我使用 Neo4j 和 py2neo 时,节点会重复
Nodes are getting repeated when I use Neo4j and py2neo
我有一组列表,列表中包含重复的项目。例如
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_one 不是图形方法。
我参考了 Whosebug 中的一些链接,我尝试了匹配和合并,但也不起作用
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 中创建唯一节点。
假设标签仅由它们的名称标记,这里是一个使用来自 py2neo 的 graph.merge
的工作示例:
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'})
我有一组列表,列表中包含重复的项目。例如 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_one 不是图形方法。
我参考了 Whosebug 中的一些链接,我尝试了匹配和合并,但也不起作用
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 中创建唯一节点。
假设标签仅由它们的名称标记,这里是一个使用来自 py2neo 的 graph.merge
的工作示例:
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'})