为了说明这个问题,创建一千个标记为 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;

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

最佳答案

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

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

关于neo4j - neo4j 中不一致的密码查询结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25312897/

10-12 17:26