【问题标题】:Inconsistent cypher query results in neo4j不一致的密码查询导致neo4j
【发布时间】:2014-08-14 16:19:33
【问题描述】:

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

上述密码返回不一致的结果,有时不返回节点,有时返回多个节点。

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

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

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

【问题讨论】:

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

标签: neo4j cypher


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多