Neo4j Cypher查询:查找连接到节点的所有节点,这些节点具有3个以上的其他关系

时间:2018-02-05 12:33:59

标签: graph neo4j cypher

我的Cypher查询有问题。我有一些名为:SENTENCE的节点和一些名为:WORD的节点。 :SENTENCE个节点具有:CONTAINS:WORD个节点的关系。

我想找到连接到:SENTENCE个节点的:WORD个节点,这些节点在3个以上的其他:SENTENCE个节点中使用。所有:WORD个节点都必须符合此标准。

我试过这样的事情:

MATCH p=(s1:SENTENCE)-[:CONTAINS]-(w:WORD)-[:CONTAINS]-(s2:SENTENCE)
WITH s1,w, COUNT(s2) as num 
WHERE num > 3  
RETURN s1
LIMIT 25

但结果包含:SENTENCE个节点,其中一个而不是所有:WORD节点的最小度为3.

其他一些尝试:

MATCH p=(s1:SENTENCE)-[:CONTAINS]-(w:WORD)-[:CONTAINS]-(s2:SENTENCE)
WHERE SIZE((:SENTENCE)-[:CONTAINS]-(w:WORD)) > 3 
RETURN s1
LIMIT 25

但这不适用于Sentence中包含的任何:WORD个节点。它仅适用于1。

所以我的问题是:如何查询条件是否适用于所有节点,而不仅仅是一个节点。

1 个答案:

答案 0 :(得分:2)

这种要求通常需要收集节点并使用all()函数来确保某些谓词适用于集合的所有元素:

MATCH (s1:SENTENCE)-[:CONTAINS]-(w:WORD)
WITH s1, collect(w) as words
WHERE all(word in words WHERE size((word)-[:CONTAINS]-()) > 3)
RETURN s1
LIMIT 25