neo4j中的密码查询结果不一致

neo4j中的密码查询结果不一致,neo4j,cypher,Neo4j,Cypher,为了说明此问题,请创建标记为z且具有递增数值属性zid的1000个节点 FOREACH (i IN range(1, 1000)| CREATE (z:z { zid: i })); 现在使用介于1和1000之间的随机zid值查找节点 MATCH (n:z { zid: round(rand()*1000)}) RETURN n; 上述密码返回的结果不一致,有时不返回任何节点,有时返回多个节点 按如下方式调整密码会产生一致的结果 WITH round(rand()*1000) AS x M

为了说明此问题,请创建标记为z且具有递增数值属性zid的1000个节点

FOREACH (i IN range(1, 1000)| CREATE (z:z { zid: i }));
现在使用介于1和1000之间的随机zid值查找节点

MATCH (n:z { zid: round(rand()*1000)}) 
RETURN n;
上述密码返回的结果不一致,有时不返回任何节点,有时返回多个节点

按如下方式调整密码会产生一致的结果

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

第一个cypher查询有什么问题?

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


也就是说,这看起来像是一个特定于
rand()
函数的bug。

多个节点返回了哪些值?如果rand()*1000的计算结果为零,则不会返回任何节点,因为您没有创建id为零的节点。