2014-11-05 4 views
3

Предположим, у меня есть следующий код:(py2neo) Как проверить, существует ли связь?

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) ничего не должен делать. Возможна ли такая функция?

ответ

4

То, что я сделал для этого является использование следующей функции:

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 помогли мне понять это.