Neo4j Cypher 查询查找我拥有所有成分和足够数量的食谱

问题描述 投票:0回答:1

我正在尝试编写一个查询,该查询将找到我可以根据两个条件制作的食谱。我需要拥有所有成分,并且每种成分都需要有足够的数量。

我有一个像这样的图形结构:

我有一些与配料有关系的配方节点,这些节点指定了我需要的配料的数量。我有 Pantry 节点,其与配料的关系指定了我实际拥有的配料的数量。

我正在尝试使用以下查询,但它没有正确处理数量,因此即使我没有足够的所有成分,它也会返回食谱。

MATCH (p:Pantry)-[has:HAS]->(i:Ingredient)
WITH COLLECT(i) AS pantry_ingredients, COLLECT(has) AS pantry_quantity
MATCH (r:Recipe)-[requires:REQUIRED]->(i:Ingredient)

WITH pantry_ingredients, pantry_quantity, r, COLLECT(i) AS recipe_ingredients
WHERE ALL(x IN recipe_ingredients WHERE x IN pantry_ingredients AND EXISTS{
    MATCH (:Pantry)-[has:HAS]->(:Ingredient {name: x.name})<-[requires:REQUIRED]-(:Recipe)      
    WHERE has.quantity >= requires.quantity})
    
RETURN r

我如何修改它以根据所需数量正确过滤掉食谱?

neo4j cypher
1个回答
0
投票

这可能适合您的用例(假设您只有一个

Pantry
):

MATCH (p:Pantry)-[has:HAS]->(i:Ingredient)<-[requires:REQUIRED]-(r:Recipe)
WHERE has.quantity >= requires.quantity
WITH r, COUNT(i) AS iCount
WHERE iCount = COUNT{ (r)-[requires:REQUIRED]->() }
RETURN r
© www.soinside.com 2019 - 2024. All rights reserved.