如何在 py2neo v3 中执行 "match or create" 操作?

How can I perform a "match or create" operation in py2neo v3?

只有当具有相同属性s 的Node/Relationship 不存在于图表中时,我才想创建一个Node/Relationship。如果他们这样做,我想获取相关项目。

现在我正在做一些我认为既不惯用又低效的事情。假设每个 Person 节点都有一对唯一的 (name, age),我会这样做:

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() works only if you have just one property to search for, and match_one() 不允许关系属性。

您可以使用 Cypher MERGE 子句来执行 "match or create":

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 确实有 merge and merge_one 函数,但它们只采用一个 属性,因此使用 Cypher 将是更通用的方法。