我有以下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不存在或者让它成为一个空字段让它继续下去吗?
答案 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;