假设我有以下代码:
link = neo4j.Path(this_node,"friends",friend_node) #create a link between 2 nodes
link.create(graph_db) #add the link aka the 'path' to the database
但是我们稍后会说:
link2 = neo4j.Path(friend_node,"friends",this_node)
link2.create_or_fail(graph_db)
基本上,link.create_or_fail()
将是一个将link2路径添加到数据库的函数,或者如果路径已经存在则失败。
在这种情况下,当我拨打link = neo4j.Path(this_node,"friends",friend_node)
时,我已经在this_node
和friend_node
之间创建了一条路径,因此link2.create_or_fail(graph_db)
应该什么都不做。这样的功能可能吗?
答案 0 :(得分:5)
我为此所做的是使用以下功能:
def create_or_fail(graph_db, start_node, end_node, relationship):
if len(list(graph_db.match(start_node=start_node, end_node=end_node, rel_type=relationship))) > 0:
print "Relationship already exists"
return None
return graph_db.create((start_node, relationship, end_node))
方法graph_db.match()
查找与给定过滤器的关系。
以下link帮助我明白了这一点。
答案 1 :(得分:0)
如果您已登陆此处搜索pf py2neo的较新版本,则可以致电match_one
来检查关系:
graph.match(nodes = nodeList, r_type = rtype)
其中 nodeList 是关系的节点序列,而 rtype 是关系类型。