【问题标题】:Get all nodes from relationship contained in a list从列表中包含的关系中获取所有节点
【发布时间】:2018-06-30 09:44:30
【问题描述】:

首先,英语不是我的第一语言,所以我不完全确定如何告诉你我需要什么。我希望这个描述能让它变得更好。

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

例子:

(:cocktail{name:"gin tonic"})-[:CONTAINS]-(:ingredient{name:"gin"} (:cocktail{name:"gin tonic"})-[:CONTAINS]-(:ingredient{name:"tonic water"}

现在我的问题是:我想输入一份配料清单,并输出所有可以用这个清单制作的鸡尾酒。问题是:我如何获得所有这些鸡尾酒,即使是那些不包含列表中提供的所有成分的鸡尾酒?

示例输入:

“杜松子酒”、“汤力水”、“伏特加”

示例输出:

“汤力水”“杜松子酒”

提前致谢!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多