2014-02-12 3 views
0

В предыдущих версиях я был в состоянии выполнить этот запрос и получить обратно узлы, которые не имеют въездную < СОБСТВЕННОСТИ > отношений:Neo4j v.2.0.0 ДОПОЛНИТЕЛЬНОГО MATCH запрос

start e=node:entity_name_ft("name:doe") MATCH (e)<-[r?:PROPERTY]-() WHERE r IS NULL return e; 

В новой версии? оператор больше не принимается. Я должен использовать ДОПОЛНИТЕЛЬНЫЙ MATCH:

start e=node:entity_name_ft("name:doe") OPTIONAL MATCH (e)<-[r:PROPERTY]-() WHERE r IS NULL return e; 

Проблема заключается в том, что если я использую его как в запросе ниже я также получаю узлы, которые НЕ ИМЕЮТ входящие < СОБСТВЕННОСТИ > отношения!

Как вернуть только узлы, которые НЕ имеют входящих < НЕДВИЖИМОСТЬ > отношений?

ответ

4

Предложение WHERE в вашем запросе применяется к выходу предложения OPTIONAL MATCH - а не к комбинированному выходу.

Вы можете вырваться из контекста статьи WHERE, чтобы получить то, что вы хотите, с WITH:

neo4j-sh (?)$ create ({x: 1}),({x: 2})<-[:PROPERTY]-({x: 3});         
+-------------------+ 
| No data returned. | 
+-------------------+ 
Nodes created: 3 
Relationships created: 1 
Properties set: 3 
10 ms 
neo4j-sh (?)$ match n optional match (n)<-[r:PROPERTY]-() with n, r where r is null return n; 
+--------------+ 
| n   | 
+--------------+ 
| Node[4]{x:1} | 
| Node[5]{x:3} | 
+--------------+ 
2 rows 
4 ms 
neo4j-sh (?)$ 

Такое поведение описано в нашем описании WHERE: http://docs.neo4j.org/chunked/stable/query-where.html

+0

Awesome! Можете ли вы указать мне на документацию, где объясняется контекст запроса? – biliboc

+0

Добавлена ​​ссылка на мой ответ –

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