我正在尝试使用Cypher创建一个查询,以“查找”厨师可能缺少的成分,我的图形设置如下:
(ingredient_value)-[:is_part_of]->(ingredient)
(ingredient)
的键/值将为name="染色颜料"。(ingredient_value)
可以具有value="红色"的键/值,并且"is part of" (ingredient, name="dye colors")
。
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)
我使用这个查询语句获取所有食谱所需的成分
,但不是它们的实际值,但我只想返回厨师没有的成分
,而不是每个菜谱所需的所有成分。我尝试过
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef
但是这样没有返回任何结果。
这个问题能否通过cypher/neo4j实现,或者最好通过返回所有配料并自己排序来处理?
奖励问题:是否有一种方法可以使用cypher将厨师拥有的所有值与食谱所需的所有值匹配。到目前为止,我只返回了chef-[:has_value]->ingredient_value<-[:requires_value]-recipe
返回的所有部分匹配,并自己聚合结果。
WHERE
子句中使用exists
(也可以否定它),有关更多信息,请参见https://neo4j.com/developer/subqueries/#existential-subqueries。 - ozanmuyes