Neo4j v.2.0.0可选MATCH查询

时间:2014-02-12 07:55:22

标签: neo4j cypher

在之前的版本中,我能够运行此查询并返回没有入站的节点< 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;关系?

1 个答案:

答案 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