【发布时间】: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没有返回任何内容,那么我的查询工作正常。 -
好的,那我解释得不好。我想返回关系是给定列表子集的所有节点。基本上可以回答问题。你有做这个的原料吗?我发布了一个有效的查询,但我希望得到一些关于如何更清洁的建议
-
好的,看我的回答。