从neo4j中的特定标签搜索

时间:2018-07-30 12:28:03

标签: python-3.x neo4j py2neo neo4j-apoc

我有带有标签a,b,c,d的节点,我只想从标签“ a”和标签“ b”中搜索节点“ node1”。如果找到“ node1”,则返回该节点,否则创建带有标签“ a”的节点。

我试图这样做:

Merge(n {id: "node1"})
on create set n:a
return n

唯一的问题是它将从“ a”,“ b”,“ c”,“ d”的标签中搜索,这非常耗时。

简而言之,它是 ALLNODESCAN ,我只想从标签“ a”和“ b”中搜索。

1 个答案:

答案 0 :(得分:0)

MERGE无法对多个标签执行此操作。

虽然您可以使用OPTIONAL MATCHes,然后使用FOREACH hack进行合并以进行条件执行(在没有标签ID为:A或:B的节点的情况下),但您将无法获得从FOREACH内部的MERGEd节点上获取一个变量。

最好使用APOC conditional procedures来提供帮助:

OPTIONAL MATCH (n:A {id: "node1"})
OPTIONAL MATCH (m:B {id: "node1"})
WITH coalesce(n, m) as node // returns first non-null value
CALL apoc.do.when(node is null, "MERGE (n:A {id:'node1'}) RETURN n", '', {}) YIELD value
RETURN coalesce(node, value.n) as n