Cypher:“WHERE node.property?”与IN运算符不兼容?

时间:2013-05-23 02:12:02

标签: neo4j cypher

WHERE node.property? = ...运算符结合使用时,似乎尝试使用default-false-if-missing语法(IN)不起作用:

$ start n=node:node_auto_index(lc_name="aspirin")
> match n--a--o
> where n.isProcPhen? IN [true, false]  // n doesn't have this property
> return count(o);

=> count(o):
=> 0

但如果我不使用IN,那么它似乎正常工作:

$ start n=node:node_auto_index(lc_name="aspirin")
> match n--a--o
> where n.isProcPhen? = false
> return count(o);

=> count(o):
=> 5729

还有另一种方法可以做到这一点,还是我运气不好?

1 个答案:

答案 0 :(得分:3)

5729个结果中的任何一个实际上都有这个属性isProcPhen吗?

如果他们没有该属性,那么查询会按预期工作,因为n.isProcPhen?由于缺少属性,因此= false将评估为true

请参阅http://docs.neo4j.org/chunked/stable/query-operators.html

但是,对于IN,您只匹配值为true或false的节点。没有此属性的节点将具有n.isProcPhen?评估为null。

我怀疑你是否将查询更改为n.isProcPhen? IN [true,false,null]你将得到5729个结果。