neo4j - 更新图形时查询数据库

时间:2014-07-01 12:52:34

标签: neo4j cypher crud

我有一个在后台运行并“修复”节点的脚本,这意味着它会执行大量删除和创建关系。 在此脚本运行时,我尝试运行以下Cypher查询:

MATCH (pr:Property)-[r2:SIMILAR*0..1]-()<-[r]-(it:Item)
WHERE pr.name in ["BLACK","BLACK2"] and toFloat(it.crawler) >= 3.8
return pr.name, type(r),it

我跑了几次。有时候我会得到一个答案,有时我会得到类似的东西:

Unable to load RELATIONSHIP with id 9765815.
Neo.ClientError.Statement.EntityNotFound

当然'id'一直在变化。

据我所知,在计算过程中,一些关系会发生变化。但我认为neo4j知道如何处理它并返回最后的“真实”结果(CRUD)。 有没有办法忽略这些变化并返回当前的结果?

我正在运行neo4j-enterprise 2.0.3。

编辑:

我正在从浏览器和nodejs neo4j代理

运行查询

1 个答案:

答案 0 :(得分:0)

Neo4j完全是ACID,&#34;我&#34;意味着隔离,即交易不应该看到彼此未提交的修改。因此,你说Neo4j应该处理它。

这是我认为正在发生的事情。 Cypher查询,因为它在单个事务中执行,总是成功,没有问题。但后来发生了一些事情:&#34;浏览器&#34;与Neo4j一起提供的内容始终显示它正在显示的节点之间的所有关系,无论您是否要求它们。我假设加载这些是与原始Cypher查询不同的事务的一部分。在这种情况下,它可能会遇到它认为存在的关系,但在此期间已被您的脚本删除。

这是一个假设,但应该很容易验证。如果它是正确的,那么:

  1. 如果您将it(整个节点)更改为it.someProperty,则问题永远不会发生
  2. 如果你从命令行或通过REST运行原始的密码查询,而不是从浏览器运行,则问题永远不会发生
  3. 请告诉我们您的发现。干杯