为了说明此问题,请创建标记为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;
第一个密码查询有什么问题?
答案 0 :(得分:3)
您收到第一个查询的结果不一致的原因与Neo4j如何评估Cypher查询有关。在使用round(rand()*1000)
或简明语法时,将为z
的标签索引中的每个项评估函数WHERE
。当您使用WITH
子句时,该函数将被评估一次。
话虽如此,这看起来像是一个特定于rand()
函数的错误。