在cypher中匹配in子句

时间:2014-03-07 22:37:40

标签: neo4j cypher

如何在cypher

中执行匹配in子句

e.g。我想找一些带有ID 1,2或3的电影。

match (m:movie {movie_id:("1","2","3")}) return m

如果您违反自动索引,则语法为

START n=node:node_auto_index('movie_id:("123", "456", "789")')

这与匹配条款的区别

2 个答案:

答案 0 :(得分:4)

你的想法是:

MATCH (m:movie)
WHERE m.movie_id in ["1", "2", "3"]

但是,这不会使用2.0.1中的索引。这是新标签索引中缺少的功能,我希望很快就能解决。 https://github.com/neo4j/neo4j/issues/861

答案 1 :(得分:0)

我找到了一个(有点难看)临时解决方法。

以下查询未使用Person(name)上的索引:

匹配(p:Person)... ['JOHN','BOB']中的p.name返回...;

所以一个选择是重复整个查询n次:

匹配(p:Person)...其中p.name ='JOHN'返回... 联盟 匹配(p:Person)...其中p.name ='BOB'返回...

如果这是不合需要的,那么另一个选择是重复id n次的小查询:

匹配(p:Person)其中p.name ='JOHN'返回id(p) 联盟 match(p:Person)其中p.name ='BOB'返回id(p);

然后使用第一个结果执行第二个查询:

匹配(p:Person)... [8,16,75,7]中的id(p)返回...;

有没有办法将这些组合成一个查询?联合可以嵌套在另一个查询中吗?