如果其中一个为空,Neo4j不会寻找多个起点

时间:2013-05-13 15:18:28

标签: neo4j cypher

在以下方案中,节点“x”不存在。

start x=node:node_auto_index(key="x"), y=node(*)
return count(x), count(y)

似乎如果找不到任何起点,则不会返回任何内容。

有关如何解决此问题的任何建议吗?

2 个答案:

答案 0 :(得分:3)

这就像下面的说法(在SQL中) - 如果表X为空,你会发生什么?

select count(x), count(y) 
from x, y

我不确定你要在这里查询到底是什么,但是你可能需要一次获得一个计数,如果有可能x会回来而没有结果:

start x=node:node_auto_index(key="x")
with count(x) as cntx
start y=node(*)
return cntx, count(y) as cnty

答案 1 :(得分:0)

感谢Wes,我想出了如何使用旧的Cypher语法(pre 2.0)进行“条件添加”:

START x=node:node_auto_index(key="x")
with count(x) as exists
start y=node:node_auto_index(key="y")
where exists = 0
create (n {key:"y"})<-[:rel]-y
return n, y

这里的关键是你不能在“where”子句之后触发另一个“start”。在检查条件之前,您需要查询第二个节点(这对性能有害)。无论如何,这在2.0中使用if-then-else语句进行了补救......