【问题标题】:Neo4j/Cypher Match only if predicate applies for all relationshipsNeo4j/Cypher 仅当谓词适用于所有关系时才匹配
【发布时间】:2019-06-07 20:18:16
【问题描述】:

仅当节点具有的每个关系都满足 where 子句时,我才需要匹配节点:

MATCH (o:Otherthing)
WHERE id(o) = 1
MATCH (unknown:Thing)
WHERE (unknown)-[:DEPENDS_ON]->(:Thing)<-[:DEPENDS_ON*]-(:Thing)<-[:STARTED_WITH]-(o) 
RETURN unknown

每个匹配的“事物”应该只具有标记为“DEPENDS_ON”的关系,并且它们都应该满足条件。

我怎样才能做到这一点?

【问题讨论】:

  • 您打算使用特定的Otherthing 节点还是所有Otherthing 节点?
  • 我打算使用特定的Otherthing 节点,谢谢您的提示。我编辑了我的问题。

标签: database neo4j cypher


【解决方案1】:

这可能对你有用:

MATCH (u:Thing)-[:DEPENDS_ON]->(:Thing)<-[:DEPENDS_ON*]-(:Thing)<-[:STARTED_WITH]-(o)
WHERE ID(o) = 1
WITH u, COUNT(*) AS num
WHERE SIZE((u)--()) = num
RETURN u

查询使用有效的度数检查来获取u 的关系总数,并将其与u 满足MATCH 的次数进行比较。此外,由于您通过其本机 ID 识别 o(我假设它始终是 Otherthing 的 ID),因此不指定其标签(以避免标签验证操作)更有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多