我想过滤链接到所有给定节点的节点。
我已尝试过此查询,该查询返回具有['passionate', 'eye', 'ear']
之一的每个页面:
MATCH (includeWord:Word) WHERE includeWord.Text IN ['passionate', 'eye', 'ear']
MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
// WHERE p LINKS TO ALL includeWord AT LEAST ONCE ?
RETURN DISTINCT p
此查询也未执行此任务:
MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
WHERE includeWord.Text = 'passionate'
AND includeWord.Text = 'eye'
AND includeWord.Text = 'ear'
RETURN DISTINCT p
从编程上讲它有点丑陋和不安全,我相信你们中的一些人知道更好的答案。
也许像
MATCH (p:Page)-[:CONTAINS]->(includeWord:Word)
WHERE includeWord.Text IN_ALL ['passionate', 'eye', 'ear']
RETURN DISTINCT p
谢谢!
答案 0 :(得分:1)
糟糕,
我发现了这个问题neo4j cypher - how to find all nodes that have a relationship to list of nodes:
对于我的查询,它完美无缺。
看起来像这样:
MATCH (p:Page)-[:CONTAINS]->(word:Word)
WITH p, collect(word.Text) as words
WHERE ALL (v IN ['passionate', 'eye', 'ear'] WHERE v IN words)
RETURN p
在理解之前需要一点阅读!
答案 1 :(得分:0)
我真的有点惊讶第二个查询有效。我的理解是,密码中的MATCH
通过一次考虑一个子图来工作,这意味着任何给定的:Word
都不可能有{{1}这同时是Text
和'passionate'
。我希望你需要做类似的事情:
'eye'
显然,这是一个更复杂的查询,但是......