【问题标题】:Match nodes where all relations satisfy constraints匹配所有关系满足约束的节点
【发布时间】:2020-09-14 14:32:08
【问题描述】:

我正在寻找具有所有关系都满足该约束的关系的节点。确切的例子是你在一个列表中有一个关系。

该图基本上是鸡尾酒,关系是成分。给出一份我想知道我能做什么的配料清单。

with ['Sweet Vermouth', 'Gin', 'Campari', 'Bourbon'] as list
...
should return Negroni, Boulevardier, ...

我一直觉得这很棘手,因为我们要确保节点的所有关系都满足约束条件,但是 节点的数量很容易成为列表的子集与成分列表不完全匹配

这是迄今为止我做过的最好的,它只有在你拥有所有成分的情况下才有效,但没有多余的。

with ['Sweet Vermouth', 'Gin', 'Campari', 'Bourbon'] as list
MATCH (n:Cocktail)-[h:HAS]-(x)
WITH list, count(list) AS lth, n, COLLECT(DISTINCT x.name) AS cx, collect(DISTINCT h) as hh
WHERE ALL (i IN list WHERE i IN cx)
RETURN n

我查看了 stackoverflow.com/a/62053139/974731。我认为它不能解决我的问题

如您所见,添加波旁威士忌会去除内格罗尼酒,这不应该发生,因为我们所做的只是在我们的酒吧中添加一种成分。

【问题讨论】:

  • 我认为这些答案行不通。我已经玩过了。我会用我看到的内容更新问题。
  • 如果MATCH (n:Cocktail {name:'Negroni')-[:HAS]-({name: 'Bourbon'}) return n 没有返回任何内容,那么我的查询工作正常。
  • 好的,那我解释得不好。我想返回关系是给定列表子集的所有节点。基本上可以回答问题。你有做这个的原料吗?我发布了一个有效的查询,但我希望得到一些关于如何更清洁的建议
  • 好的,看我的回答。

标签: graph neo4j cypher


【解决方案1】:

这应该返回needed 成分在have 列表中的所有鸡尾酒。

WITH ['Sweet Vermouth', 'Gin', 'Campari', 'Bourbon'] as have
MATCH (c:Cocktail)-[:HAS]->(x)
WITH have, c, COLLECT(x.name) AS needed
WHERE ALL(n IN needed WHERE n IN have)
RETURN c

或者,如果您将have 作为parameter 传递:

MATCH (c:Cocktail)-[:HAS]->(x)
WITH c, COLLECT(x.name) AS needed
WHERE ALL(n IN needed WHERE n IN $have)
RETURN c

【讨论】:

    【解决方案2】:

    这是非常hacky,但这是我得到的地方

    with ['Sweet Vermouth', 'Gin', 'Campari', 'Bourbon'] as list
    call {
      match (ali:Cocktail)--(ii:Ingredient) //pull all nodes
      return ali, count(ii) as needed // get count for needed ingredients
    }
    MATCH (ali)--(i:Ingredient)
    WHERE i.name in list // get ingredients that are in the list
    
    WITH distinct ali.name as name, count(ali.name) as available, needed
    WHERE available = needed
    RETURN name;
    

    【讨论】:

      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多