我有一个在后台运行并“修复”节点的脚本,这意味着它会执行大量删除和创建关系。 在此脚本运行时,我尝试运行以下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代理
运行查询答案 0 :(得分:0)
Neo4j完全是ACID,&#34;我&#34;意味着隔离,即交易不应该看到彼此未提交的修改。因此,你说Neo4j应该处理它。
这是我认为正在发生的事情。 Cypher查询,因为它在单个事务中执行,总是成功,没有问题。但后来发生了一些事情:&#34;浏览器&#34;与Neo4j一起提供的内容始终显示它正在显示的节点之间的所有关系,无论您是否要求它们。我假设加载这些是与原始Cypher查询不同的事务的一部分。在这种情况下,它可能会遇到它认为存在的关系,但在此期间已被您的脚本删除。
这是一个假设,但应该很容易验证。如果它是正确的,那么:
it
(整个节点)更改为it.someProperty
,则问题永远不会发生请告诉我们您的发现。干杯