我有一个neo4j数据库,其中包含一堆成分和配方节点,它们之间有CONTAINS关系,即(配方) - [CONTAINS] - >(成分)。
我想找到包含两种特定成分的所有食谱,但我无法弄清楚如何做到这一点。从概念上讲,它看起来像我想要的是:
START ingr1=node:Ingredients(id=1), ingr2=node:Ingredients(id=2)
MATCH recipe-[CONTAINS]->ingr1,
recipe-[CONTAINS]->ingr2
RETURN recipe
显然,与不同的开始和结束节点匹配相同的关系是不行的。什么是正确的思考方式,以及适当的查询是什么样的?
答案 0 :(得分:2)
您的查询几乎是完美的,您只是在关系类型前面缺少一个冒号:
START ingr1=node:Ingredients(id=1), ingr2=node:Ingredients(id=2)
MATCH recipe-[:CONTAINS]->ingr1,
recipe-[:CONTAINS]->ingr2
RETURN recipe
如果没有冒号,CONTAINS
是关系的变量名。显然,同一个关系不能同时拥有两个不同的终端节点,这就是你得到一个空结果的原因。