【问题标题】:Finding nodes that do not have specific relationship (Cypher/neo4j)查找没有特定关系的节点(Cypher/neo4j)
【发布时间】:2014-10-29 15:50:45
【问题描述】:

我有一个带有以下内容的 neo4j 数据库:

a:Foo
b:Bar

大约 10% 的数据库拥有(a)-[:has]->(b)

我只需要获取没有这种关系的节点!

以前做()-[r?]-() 会很完美!但是它不再受支持:(相反,按照他们的建议做

OPTIONAL MATCH (a:Foo)-[r:has]->(b:Bar) WHERE b is NULL RETURN a

给我一​​个空结果,因为可选匹配需要两个节点都存在或两个节点都不存在......

那么我如何获取所有未附加到b:Bara:Foo 节点?

注意:数据集包含数百万个节点,因此查询需要高效,否则会超时。

【问题讨论】:

    标签: database neo4j cypher


    【解决方案1】:

    那就是

    MATCH (a:Foo) WHERE not ((a)-[:has]->(:Bar)) RETURN a;
    

    【讨论】:

    • 圣烟……就是这样!我一直试图将标签放在匹配的右侧。
    • 没有性能问题吗?似乎需要aaaaaaall节点
    【解决方案2】:

    如果您正在寻找所有单身人士/孤儿,这也适用:

    MATCH (a:Foo) WHERE not ((a)--()) RETURN a;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多