neo4j - 将一个标签的“属性键”合并到另一个标签中
问题描述
(:Label1 {emp_id: 1, name:"abc"})
(:Label1 {emp_id: 2, name:"xyz"})
(:Label1 {emp_id: 3, name:"pqr"})
INDEX ON :Label1(emp_id)
(:Label2 {emp_id: 1, car_name:"A"})
(:Label2 {emp_id: 1, car_name:"B"})
(:Label2 {emp_id: 1, car_name:"C"})
(:Label2 {emp_id: 2, car_name:"A"})
(:Label2 {emp_id: 2, car_name:"D"})
(:Label2 {emp_id: 3, car_name:"B"})
(:Label2 {emp_id: 3, car_name:"F"})
问题:我只需要保留Label1,并且需要在Label1 中合并键“car_name”。怎么做 ?
注意:两个标签中的节点数以百万计,Label2 节点几乎是 Label1 的两倍
解决方案
我要做的是创建一个新标签 Car,其中包含有关 car_name 的信息,并将连接到标签为 Label1 的节点。稍后我将删除所有 Label2 节点,因为您不再需要它们。
由于您有数百万个节点,因此最好使用 apoc.periodic.iterate 进行批处理。
CALL apoc.periodic.iterate(
"MATCH (l:Label1), (l2:Label2)
WHERE l.emp_id = l2.emp_id return l,l2",
"MERGE (c:Car{car_name: l2.car_name})
MERGE (l)-[:HAS_CAR]->(c)",
{batchSize:5000, iterateList:true})
现在删除所有带有 label2 的节点
CALL apoc.periodic.iterate(
'MATCH (l:Label2) RETURN l',
'DETACH DELETE l',
{batchSize:1000,parallel:true})
推荐阅读
- python - 在 Python 中组合通过 URL 上传的数据帧
- flutter - 如何进行 Flutter Podcast API 调用以在 iTunes 上显示来自一位艺术家的播客?
- animation - UWP 中的动画路径
- azure - 将 Hangfire 作业记录到 Application Insights 并将活动与操作 ID 相关联
- spring - sendError 与消息 oncePerRequestFilter
- c - 警告:从不兼容的指针类型传递“gets”的参数 1
- flutter - 如何使用 Dart 中的命名参数在构造函数初始化列表中创建最终成员变量?
- java - 如何更改 Apache Ignite 的默认本地发现端口?
- python - 如何将自定义分隔符添加到列表但仅在特定位置?
- javascript - HTML 元素上的实际隐藏属性 - 正确的术语是什么?