2016-08-30 23 views
0

只有在圖中不存在具有相同屬性s的節點/關係時,我纔想創建節點/關係。如果他們這樣做,我想取回相關的項目。如何在py2neo v3中執行「匹配或創建」操作?

現在我正在做一些我認爲既單一又低效的事情。假設每個Person節點都有一個唯一的對(nameage),我做這樣的事情:

try: 
    node = graph.data('MATCH (n:Person) WHERE n.name = {name} AND' 
         'n.age = {age} RETURN n LIMIT 1', 
         name=my_name, age=my_age)[0]['n'] 
except IndexError: 
    node = Node('Person', name=my_name, age=my_age) 

據我瞭解find_one()只適用,如果你有一個屬性搜索,並match_one()允許的關係沒有屬性。

回答

1

可以使用Cypher支架MERGE條款進行「匹配,或者創建」:

node = graph.data('MERGE (n:Person) WHERE n.name = {name} AND' 
        'n.age = {age} RETURN n LIMIT 1', 
        name=my_name, age=my_age)[0]['n'] 

py2neo確實有mergemerge_one功能,但它們只需要一個單一的屬性,所以使用的Cypher將是更一般的做法。