在之前的版本中,我能够运行此查询并返回没有入站的节点< PROPERTY>关系:
start e=node:entity_name_ft("name:doe") MATCH (e)<-[r?:PROPERTY]-() WHERE r IS NULL return e;
在新版本中?不再接受运营商。我必须使用OPTIONAL MATCH:
start e=node:entity_name_ft("name:doe") OPTIONAL MATCH (e)<-[r:PROPERTY]-() WHERE r IS NULL return e;
问题是,如果我在下面的查询中使用它,我也会得到有入境的节点&lt; PROPERTY&gt;关系!
如何仅返回没有入站的节点&lt; PROPERTY&gt;关系?
答案 0 :(得分: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