Neo4j入门(五)删除节点的正确姿势

Python爬虫与算法

共 1598字,需浏览 4分钟

 · 2021-11-29

  本文还是照例讲讲自己工作中遇到的坑。本文将会讲述如何在Neo4j中正确地删除节点。
  图数据库在删除节点的时候,并不像删除属性和删除关系那样方便,原因就在于删除节点时,可能有关系与之相连,因此需要考虑这个问题。Neo4j在删除节点时,已经考虑了这个问题,那么,我们该如何正确地在Neo4j中删除节点呢?
  本文将会介绍如何使用Neo4j原生Cypher语句及py2neo模块进行节点删除。
  首先,我们有如下的3个节点及边,如下图:

图谱示例

原生Cypher语句

  1. 只删除节点

MATCH (n:Test{name: 'test1'}) DELETE (n)

运行上述语句会报错:Cannot delete node<10000>, because it still has relationships. To delete this node, you must first delete its relationships.,该语句只删除name为test1的节点,但该节点因为有关系与之相连,故删除节点报错。

  1. 删除节点及其子图

MATCH (n:Test{name: 'test1'}) DETACH DELETE (n)

运行上述语句,执行成功,会删除name为test1的节点及其子图,也就是该节点与其他节点相连的边也会删除,如下图:

删除节点及其子图
  1. 删除全部节点

MATCH (n) DETACH DELETE (n)

该语句会删除整个图谱,即所有的节点和关系,应当慎用,另外,当图谱规模很大时,运行该语句容易报错(OOM,Out Of Memeory)。

py2neo

  py2neo是Python操作Neo4j的第三方模块。

  1. 只删除节点

  py2neo没有相应的函数来实现只删除节点的操作,可以借助graph.run()函数调用原生Cypher语句实现,示例代码如下:

# -*- coding: utf-8 -*-
from py2neo import Graph

# 连接Neo4j
url = "http://localhost:7474"
username = "neo4j"
password = "***"
graph = Graph(url, auth=(username, password))
print("neo4j info: {}".format(str(graph)))

# 只删除节点
graph.run("MATCH (n:Test{name: 'test1'}) DELETE (n)")


  1. 删除节点及其子图

  py2neo的graph中的delete()函数会删除节点及其子图,示例代码如下:

# -*- coding: utf-8 -*-
from py2neo import Graph
from py2neo import NodeMatcher

# 连接Neo4j
url = "http://localhost:7474"
username = "neo4j"
password = "***"
graph = Graph(url, auth=(username, password))
print("neo4j info: {}".format(str(graph)))

# 删除节点及其子图
node = NodeMatcher(graph=graph).match("Test", name='test1').first()
result = graph.delete(node)

总结

  本文到此结束,感谢阅读,后续将会介绍更多关于知识图谱相关的内容,敬请关注~


浏览 119
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报