neo4j中的cypher查询结果不一致

时间:2014-08-14 16:19:34

标签: neo4j cypher

为了说明此问题,请创建标记为z的千个节点,其中包含递增数字属性zid。

FOREACH (i IN range(1, 1000)| CREATE (z:z { zid: i }));

现在使用1到1000之间的随机zid值找到一个节点。

MATCH (n:z { zid: round(rand()*1000)}) 
RETURN n;

上面的cypher返回不一致的结果,有时没有返回节点,有时会返回多个节点。

如下调整密码产生一致的结果。

WITH round(rand()*1000) AS x
MATCH (n:z { zid: x })
RETURN x, n;

第一个密码查询有什么问题?

1 个答案:

答案 0 :(得分:3)

您收到第一个查询的结果不一致的原因与Neo4j如何评估Cypher查询有关。在使用round(rand()*1000)或简明语法时,将为z的标签索引中的每个项评估函数WHERE。当您使用WITH子句时,该函数将被评估一次。

话虽如此,这看起来像是一个特定于rand()函数的错误。