Neo4j:匹配多个终端节点

时间:2013-12-08 17:33:42

标签: neo4j

我有一个neo4j数据库,其中包含一堆成分和配方节点,它们之间有CONTAINS关系,即(配方) - [CONTAINS] - >(成分)。

我想找到包含两种特定成分的所有食谱,但我无法弄清楚如何做到这一点。从概念上讲,它看起来像我想要的是:

START ingr1=node:Ingredients(id=1), ingr2=node:Ingredients(id=2)
MATCH recipe-[CONTAINS]->ingr1,
      recipe-[CONTAINS]->ingr2
RETURN recipe

显然,与不同的开始和结束节点匹配相同的关系是不行的。什么是正确的思考方式,以及适当的查询是什么样的?

1 个答案:

答案 0 :(得分:2)

您的查询几乎是完美的,您只是在关系类型前面缺少一个冒号:

START ingr1=node:Ingredients(id=1), ingr2=node:Ingredients(id=2) 
MATCH recipe-[:CONTAINS]->ingr1,
      recipe-[:CONTAINS]->ingr2
RETURN recipe

如果没有冒号,CONTAINS是关系的变量名。显然,同一个关系不能同时拥有两个不同的终端节点,这就是你得到一个空结果的原因。