即使在Neo4J Cypher中它是空的,是否可以返回空结果?

时间:2014-12-25 18:10:54

标签: neo4j cypher

我有以下Cypher Neo4j查询:

MATCH (u:User{uid:'0ed0c7f0-8c55-11e4-8280-fbb0b27a7a0b'}), 
(ctxa:Context{name:'private'}), ctxa-[:BY]->u 
WITH DISTINCT ctxa,u MATCH (s:Statement), (ctx:Context), 
ctx-[:BY]->u, s-[:IN]->ctx, s-[:BY]->u 
WHERE (ctx.name="about" ) AND ctx.public = '1' 
RETURN DISTINCT s ORDER BY s.timestamp DESC;

它工作正常,但是,当数据库中没有匹配的节点ctxa时,查询不会继续,因为它至少需要一些东西。

那么可以覆盖这个设置并简单地说ctxa不存在或者让它成为一个空字段让它继续下去吗?

1 个答案:

答案 0 :(得分:1)

您可以在这种情况下使用OPTIONAL MATCH:

MATCH (u:User{uid:'0ed0c7f0-8c55-11e4-8280-fbb0b27a7a0b'})
OPTIONAL MATCH (ctxa:Context{name:'private'})-[:BY]->u 
WITH DISTINCT ctxa,u 
MATCH (s:Statement), (ctx:Context), 
ctx-[:BY]->u, s-[:IN]->ctx, s-[:BY]->u 
WHERE (ctx.name="about" ) AND ctx.public = '1' 
RETURN DISTINCT s ORDER BY s.timestamp DESC;