我的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。
所以我的问题是:如何查询条件是否适用于所有节点,而不仅仅是一个节点。
答案 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