neo4j - 节点已删除,无法用于创建关系
问题描述
我在 Neo4j 中有一个电网的节点链接模型(它是一个图表),所以它应该像手套一样适合。节点和链接是它们自己的对象,可以以抽象的方式遍历。Link有一个起始节点(:Link) - [:begint_bij] -> (:Node) 和一个结束节点 (:Link) – [:eindigt_bij] –> (:Node) 每个 :Node 和 :Link 都引用一个或多个对象。链接和节点由它们在此模型中的引用唯一定义。
该模型是由面向对象的 GIS 模型生成的,并且由于生成方法(我对此没有影响),冗余节点链接(对)在数据集中。
在图片中,我们看到围绕电缆的节点云(紫色)和链接(绿色)。
您可以通过模式清楚地看到冗余对:Node-Link 对,其中节点仅与(电缆、gisreferences 和链接)有关系,而链接仅与(电缆、gisreferences 和节点)有关系
为了删除冗余的节点链接对,我提出了这个查询:
"MATCH (fld:e_lv_function_cable ) where not exists(fld.done) Return fld",
"match (fld) - [:GenObject] - (fn:Node)
match (fn) - [:begint_bij] - (l1:Link)
with [(fn) - [] - (obj1) | labels(obj1)] AS conn1, [(l1) - [] - (obj2) | labels(obj2)] AS conn2, fn, l1, fld
where all( lb1 IN conn1 where lb1[0] in ['e_lv_function_cable','GisReference','Link'] )
and all( lb2 IN conn2 where lb2[0] in ['e_lv_function_cable','GisReference','Node'] )
with l1, fn, fld
match (l1) - [:eindigt_bij] - (n2)
match (l2:Link) - [r] - (fn) - [:begint_bij] - (l1)
Call apoc.do.when (
n2 is not null and l2 is not null and r is not null,
'Call apoc.create.relationship(l2, type(r), {}, n2) YIELD rel Detach Delete l1, fn',
'',
{n2: n2, l2: l2, r: r, l1: l1, fn: fn}) YIELD value
with fld
set fld.done=true
", {batchSize:100, parallel:false}) yield batches, total return batches, total
它完成了这项工作。
但是在某些情况下,我会收到一个错误(在调试日志中):
调用过程失败apoc.do.when
:原因:org.neo4j.graphdb.NotFoundException:Node[] 已删除,不能用于创建关系
而有时:
调用过程失败apoc.do.when
:原因:java.lang.IllegalStateException:内核 API 返回不存在的关系类型:-1
并且 set done=true 永远不会完成。
这对我来说几乎是有意义的。
任何人都可以请:
- (更好)向我解释造成这种情况的原因,并且
- 向我指出一个可以 100% 完成工作的查询
谢谢。
解决方案
推荐阅读
- android-studio - Kotlin - menuInflater 找不到 xml 文件的引用
- javascript - 以编程方式选择浏览器中未更新的选项
- python - 为向量创建索引时,“列表”对象不可调用
- java - SpringBoot:如何使用 Wrapper Class 将两个 JSON pojo 绑定到两个单独的对象中并将它们保存到我的数据库中?
- amazon-web-services - 使用clojure调用aws lambda函数的空指针异常?
- typescript - Typescript中带有参数的动态键
- javascript - 在页面上以表格格式显示存储在 SharePoint 列表中的数据,并在页面上的表格列上放置过滤器以过滤数据
- python - Django3 - 使用上下文处理器填充导航栏项目 SQlite DB 数据的问题
- python - 每次在 tkinter 中将文本插入文本框时,如何添加间距?
- google-custom-search - 使用 Google 自定义搜索 JSON 在多个站点中搜索