我有开始节点列表(Ingridients),我想找到所有配方,它们都有指定的ingridients(下面的代码示例)。 我正在尝试查找所有含有ingridient的食谱&Ingridient2' Ingridient3' Ingridient4'。
我使用此代码
MATCH result=(n:Ingridient)-[r:RELATED]->(m:Recipe)
WHERE n.name IN ['Ingridient2', 'Ingridient3','Ingridient4']
RETURN result
但是这段代码返回的所有配方只包含一个Ingridient2或Ingridient3等。
我的问题是如何找到配方,包含指定的Ingridients。 还附带了示例http://console.neo4j.org/r/doxwy4
的链接CREATE (Recipe1:Recipe {name:'Recipe1'})
CREATE (Recipe2:Recipe {name:'Recipe2'})
CREATE (Recipe3:Recipe {name:'Recipe3'})
CREATE (Recipe4:Recipe {name:'Recipe4'})
CREATE (Ingridient1:Ingridient {name:'Ingridient1'})
CREATE (Ingridient2:Ingridient {name:'Ingridient2'})
CREATE (Ingridient3:Ingridient {name:'Ingridient3'})
CREATE (Ingridient4:Ingridient {name:'Ingridient4'})
CREATE (Ingridient5:Ingridient {name:'Ingridient5'})
CREATE
(Ingridient1)-[:RELATED]->(Recipe1),
(Ingridient2)-[:RELATED]->(Recipe1),
(Ingridient3)-[:RELATED]->(Recipe1)
CREATE
(Ingridient2)-[:RELATED]->(Recipe2),
(Ingridient3)-[:RELATED]->(Recipe2),
(Ingridient4)-[:RELATED]->(Recipe2)
CREATE
(Ingridient3)-[:RELATED]->(Recipe3),
(Ingridient4)-[:RELATED]->(Recipe3),
(Ingridient5)-[:RELATED]->(Recipe3)
答案 0 :(得分:4)
这是一个Cypher,有评论,你想做什么。您可以使用WHERE ALL(...)对整个集合进行验证。
// Match all Recipe and their ingredients
MATCH (n:Ingridient)-[r:RELATED]->(recipe:Recipe)
// Collect ingredients into a collection
WITH COLLECT(n.name) as ingredients, recipe
// Filter where recipe uses all our ingredients
WHERE ALL(part in ['Ingridient2', 'Ingridient3','Ingridient4'] WHERE part IN ingridients)
// Return valid recipes
RETURN recipe