Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 匹配所有关系满足约束的节点_Graph_Neo4j_Cypher - Fatal编程技术网

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