我有一个Neo4j Cypher查询,删除与label:A的关系,并将其替换为另一个:与不同节点的关系。
MATCH (n:Item), (m)
WHERE ID(n) = {nodeId} AND ID(m) = {relatedNodeId}
OPTIONAL MATCH (n)-[r:A]->()
DELETE r
CREATE (n)-[:A]->(m)
当我直接加载我正在开发的应用程序的编辑器页面时,它会加载Item和关系,并显示它。
MATCH (n)-[a:A]->(info) WHERE ID(n) = {id} RETURN a, info
然后,当我尝试保存更改(从而运行delete + create query)时,它完全符合我的预期。
但是,如果我回到我的应用程序的概述页面(单页面应用程序),然后返回到同一项目的编辑器页面并尝试再次保存它,则会抛出错误:
neo4j.ClientError: [Neo.ClientError.Statement.EntityNotFound] Unable to load RELATIONSHIP with id 274.]
我不禁想到这是我的客户端应用程序的问题。它只发生在我第二次进入编辑页面时 - 第一次我可以随心所欲地保存和重新保存,但第二次它总是抛出错误,它无法找到与之关系比当前ID低1的ID:数据库中的关系。
我在服务器和客户端应用程序中都检查过,每次{id}
和{relId}
值都相同。它们是数字,在我当前的测试用例中{nodeId}
总是7
而{relatedNodeId}
是5
或8
(在两者之间切换)。
我不明白为什么Neo4j正在寻找我发布的查询的特定关系ID,以及为什么它会在第一次但不是第二次正常工作。我认为它可能是一些隐藏的缓存(因为每次编辑器加载时,它都会再次检索所有节点和关系数据,所以当编辑器第二次加载服务器运行相同的加载查询3次时)我对Neo4j很新,所以在我的查询中可能只是一个新手的错误。
任何能够解释这个问题的人都会对此有所了解吗?
我正在通过Node.js中的neo4j模块使用Neo4j 3.0.0版