在Neo4j中,我想获得从特定节点出现的路径,然后我想删除路径中的每个节点,并根据存储的操作删除它

13z8s7eq  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(66)

我正在做一个将MySQL表转换为Neo4j图的项目。转换后,我在图中使用java复制SQL数据库的删除操作。所以当我删除SQL数据库中的记录时,我想删除与该特定记录相关的节点。例如,我从表Complaint中删除complaint_id= 7的Complaint_Details是Complaints with ON_CASCADE Action的子表。它还有另一个子表ON_CASCADE SET NULL。因此,在图中,我想删除complaint_id = 7的Complaint节点,Complaint_id =7的Complaint_Details节点,并删除其子节点的相应属性。
我目前的方法是使用String cypherPath =“MATCH path=”从节点complaint(complaint_id为7)查询路径(n:“+ tableName +“{”+ columnName +“:“+ PkValue +“})-[*]->(m)WHERE NOT EXISTS((m)-[]->())RETURN path”;然后我遍历每个节点,并检查数据库中的删除操作。根据该操作,我要么删除节点,要么删除属性。此方法占用大量时间。(2000条记录大约为5秒)是否有更有效的方法来做到这一点?

gopyfrb3

gopyfrb31#

根据您的评论,我假设您的数据模型看起来像这样(节点可以有比显示的更多的属性):

(:Complaints {complaint_id: 7})-[:Complaint_Details_complaint_id]->(:Complaint_Details {complaint_id: 7, detail_id: 123})-->(:Foo {detail_id: 123})

字符串
其中Foo只是Complaint_Details节点的子节点的任意数量的标签之一。
在这种情况下,当删除一个Complaints节点时,你也可以删除它的Complaint_Details节点,并删除其子节点的detail_id属性:

MATCH (c:Complaints)-[:Complaint_Details_complaint_id]->(d:Complaint_Details)
WHERE c.complaint_id = $complaint_id
OPTIONAL MATCH (d)-->(f)
REMOVE f.details_id
DETACH DELETE d, c


该查询假设所需的complaint_id值作为$complaint_idparameter传递。

相关问题