从列表中包含的关系中获取所有节点

时间:2018-06-30 09:44:30

标签: neo4j cypher

首先英语不是我的母语,所以我不确定如何告诉您我需要什么。我希望这个描述会更好。

我在neo4j中有一个图形,其中包含两种类型的标签:鸡尾酒和配料。它们通过称为CON​​TAIN的关系连接。

示例:

  

(:鸡尾酒{name:“杜松子酒补品”})-[:CONTAINS]-(:成分{name:“杜松子酒”}   (:cocktail {名称:“杜松子酒补品”})-[:CONTAINS]-(:成分{name:“补品水”}

现在我的问题是:我想输入原料清单并输出所有可能用此清单制作的鸡尾酒。问题是:如何获得所有这些鸡尾酒,甚至那些不包含列表中提供的所有成分的鸡尾酒?

示例输入:

  

“杜松子酒”,“补品水”,“伏特加”

示例输出:

  

“补品水” <-“杜松子酒补品”->“杜松子酒”

提前谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要浏览成分列表,并获取所有可能的鸡尾酒的列表。然后,仅选择那些鸡尾酒,其所有成分都在成分列表中:

WITH ["gin","tonic water","vodka", "lemon"] AS ingredientNames

UNWIND ingredientNames AS ingredientName
MATCH (c:cocktail)-[:CONTAINS]-(i:ingredient {name: ingredientName})

WITH c, 
     collect(DISTINCT i) AS ingredients
MATCH (c)-[:CONTAINS]->(i:ingredient)

WITH c, ingredients,
     collect(DISTINCT i) AS ingredientsTest
     WHERE SIZE(ingredients) = SIZE(ingredientsTest)

RETURN c AS cocktail,
       ingredients