我正在尝试使用 cypher 创建一个查询,它将“查找”厨师可能拥有的缺失成分,我的图表设置如下:
(ingredient_value)-[:is_part_of]->(ingredient)
(ingredient)
将有一个名称=“染料颜色”的键/值。(ingredient_value)
可以有一个键/值 value="red" 并且“是”的一部分(ingredient, name="dye colors")
.
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)
我正在使用此查询来获取所有ingredients
,但不是配方所需的实际值,但我只想返回ingredients
厨师没有的,而不是每个食谱所需的所有成分。我试过
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef
但这什么也没返回。
这是可以通过 cypher/neo4j 完成的事情,还是最好通过返回所有成分并自己对它们进行分类来处理?
奖励:还有一种方法可以使用密码将厨师拥有的所有值与食谱所需的所有值相匹配。到目前为止,我只返回了由 a 返回的所有部分匹配项chef-[:has_value]->ingredient_value<-[:requires_value]-recipe
并自己汇总结果。
2013 年 1 月 10 日更新:
在 Neo4j 中遇到了这个2.0参考:
尽量不要使用可选关系。
首先,
不要像这样使用它们:
MATCH a-[r?:LOVES]->() WHERE r IS NULL
您只需确保它们不存在即可。
相反,这样做:
MATCH (a) WHERE NOT (a)-[:LOVES]->()
使用 cypher 检查关系是否不存在:
...
MATCH source-[r?:someType]-target
WHERE r is null
RETURN source
这 ?标记使关系可选。
OR
在 neo4j 2 中执行以下操作:
...
OPTIONAL MATCH source-[r:someType]-target
WHERE r is null
RETURN source
现在您可以检查不存在(空)的关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)