Graph 匹配所有关系满足约束的节点
我希望找到所有关系都满足该约束的节点。确切的例子是列表中是否有关系 该图主要是鸡尾酒,其关系为成分。给我一份配料表,我想知道我能做什么Graph 匹配所有关系满足约束的节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,我希望找到所有关系都满足该约束的节点。确切的例子是列表中是否有关系 该图主要是鸡尾酒,其关系为成分。给我一份配料表,我想知道我能做什么 with ['Sweet Vermouth', 'Gin', 'Campari', 'Bourbon'] as list ... should return Negroni, Boulevardier, ... 我发现这很棘手,因为我们想确保一个节点的所有关系都满足约束,但是节点的数量很容易成为列表的子集,而与成分列表不完全匹配 这是到目前为止我做的最好的,只
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。我认为这不能解决我的问题
正如你所看到的,波旁威士忌的加入去除了内格罗尼香肠,这是不应该发生的,因为我们所做的只是在我们的酒吧里添加一种成分。它非常粗糙,但这就是我得到的
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;
这应该返回所有
所需成分在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
或者,如果您通过了考试,则将
作为:
我认为这些答案不起作用。我已经玩过了。我会用我看到的更新这个问题return n
不返回任何内容,那么我的查询工作正常。好吧,那么我解释得不好。我想返回关系是给定列表子集的所有节点。基本上是为了回答这个问题。你有什么成分可以做到这一点。我发布了一个有效的查询,但我希望得到一些关于制作cleanerOK的建议,请参阅我的回答。
MATCH (c:Cocktail)-[:HAS]->(x)
WITH c, COLLECT(x.name) AS needed
WHERE ALL(n IN needed WHERE n IN $have)
RETURN c