代码之家  ›  专栏  ›  技术社区  ›  SingleShot

Neo4J Cypher查询以将集合与其他集合匹配

  •  1
  • SingleShot  · 技术社区  · 6 年前

    我是新来的Neo4J,在一个问题上很费劲。这不是我的实际领域,但我试图将其简化为一个类似的问题。

    • 一个地区有市场
    • 市场提供水果(如苹果、梨)
    • 市场提供蔬菜(如卷心菜、西兰花)
    • 食谱需要水果(如苹果、桃子)
    • 菜谱需要蔬菜(如卷心菜)

    我想要:

    • 我所在地区市场能满足的食谱清单

    1. 创建该地区市场提供的所有水果的组合列表
    2. 对于每个配方,检查其所需水果是否在水果列表中
    3. 所有通过这些检查的食谱都会被退回

    当然,Cypher查询可能与此非常不同。任何建议都非常感谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   stdob--    6 年前

    假设有以下数据方案:

    enter image description here

    然后查询如下所示:

    • 对于区域中的每个潜在配方,计算该区域为此配方提供的产品数量
    • 对于每个潜在配方,计算所需产品的数量

    MATCH (R:Region {name: 'My Region'})-[:contains]->(M:Market)
                                        -[:provides]->(P:Product)
                                        <-[:requires]-(RC:Recipe)
    WITH R, RC, 
            count(DISTINCT P) AS productsCountForRecipeByRegion
    MATCH (RC)-[:requires]->(P:Product)
    WITH R, RC, productsCountForRecipeByRegion, 
         count(P) as productsCountForRecipe 
         WHERE productsCountForRecipeByRegion = productsCountForRecipe
    RETURN R, RC