2014-02-12 48 views
0

在以前的版本中,我能夠運行這個查詢並取回沒有入站<PROPERTY>關係的節點:Neo4j的v.2.0.0可選匹配查詢

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; 

的問題是,如果我在查詢中使用它就像下面我還拿到確實有入站<PROPERTY>關係的節點!

如何僅返回沒有入站的節點<PROPERTY>關係?

回答

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

真棒!你可以指點我查詢上下文的文檔嗎? – biliboc

+0

添加了一個鏈接到我的答案 –