【问题标题】:Search from specific labels in neo4j从 neo4j 中的特定标签中搜索
【发布时间】:2018-07-30 12:28:02
【问题描述】:

我有标签为 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”中搜索。

【问题讨论】:

  • 你的作业有错误吗?冒号?
  • 我的错误是“on create set n:a”

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


【解决方案1】:

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

虽然您可以使用 OPTIONAL MATCHes,然后使用 FOREACH hack 进行 MERGE 以进行条件执行(如果标签没有具有该 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

【讨论】:

  • 太好了……正是我需要的
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2019-04-25
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
相关资源
最近更新 更多