删除操作是指根据过滤条件删除图集中已有的点、边数据,由 delete()
命令触发。
删除点时,以该点为起点/终点的边也会自动删除。在使用复杂过滤器进行删除时一定要慎重,以免产生不可挽回的损失。
删除操作会增加图集中的无效数据,影响数据查询的效率,建议定期对图集进行碎片整理,详见《图集》中的
compact()
命令。
不建议在算法流式返回之后进行删除操作,详见《Ultipa 图分析与图算法》-《算法的使用》-《执行方式》-流式返回
stream()
的相关说明。
语法:
- 语句别名:不支持
// 删除当前图集中的 N 个点数据
delete().nodes(<filter>).limit(<N>)
// 删除当前图集中的 N 个边数据
delete().edges(<filter>).limit(<N>)
示例图集:(以下示例将在本图基础上运行)
在空图集中依次运行以下各行代码以创建该图数据:create().node_schema("account").edge_schema("follow")
create().node_property(@account, "name").edge_property(@follow, "time", datetime)
insert().into(@account).nodes([{_id:"U001", _uuid:1, name:"Jason"}, {_id:"U002", _uuid:2, name:"Tim"}, {_id:"U003", _uuid:3, name:"Grace"}, {_id:"U004", _uuid:4, name:"Ted"}])
insert().into(@follow).edges([{_uuid:1, _from_uuid:4, _to_uuid:1, time:"2021-09-10"}, {_uuid:2, _from_uuid:3, _to_uuid:2, time:"2020-03-12"}, {_uuid:3, _from_uuid:4, _to_uuid:2, time:"2023-07-30"}])
示例:删除 name 为 Jason 的节点
delete().nodes({name == "Jason"})
1 Node(s) Affected
2 Edge(s) Affected
示例:删除任意两条边
delete().edges().limit(2)
2 Edge(s) Affected