2013-05-23 2 views
0

кажется, что пытается использовать по умолчанию-ложь, если пропущенный синтаксис (WHERE node.property? = ...) не работает в сочетании с IN оператором:Cypher: «WHERE node.property?» не совместим с оператором 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 

Есть ли другой способ сделать это, или мне не повезло?

ответ

3

У любого из 5729 результатов действительно есть это свойство isProcPhen?

Если у них нет этого свойства, запрос работает так, как ожидалось, потому что n.isProcPhen? = Ложь будет вычисляться так, поскольку свойство отсутствует

http://docs.neo4j.org/chunked/stable/query-operators.html См

Однако, IN, вы только соответствующие узлы, которые имеют значения истинным или ложным. Узлы, которые не имеют этого свойства, будут иметь n.isProcPhen? оцените значение null.

Я подозреваю, что если вы измените свой запрос на n.isProcPhen? IN [true, false, null] вы вернете 5729 результатов.

+0

Спасибо, часть «оценивать до нуля» была ключевой. 'IN [true, false, null]' работал как шарм. –

Смежные вопросы