MongoDB 删除文档

在前面的几个章节中我们已经学习了 MongoDB 中如何为集合添加数据和更新数据,在本章节中我们将继续学习 MongoDB 集合的删除。

常用的删除文档方法包括 deleteOne()、deleteMany() 以及 findOneAndDelete()。

使用场景:

  • 数据清理:删除不再需要的旧数据或无效数据。
  • 数据修正:在数据修正过程中删除错误的或重复的文档。
  • 自动化任务:在自动化脚本或任务中,根据特定条件删除文档。

1、deleteOne()

deleteOne() 方法用于删除匹配过滤器的单个文档。

语法:

db.collection.deleteOne(filter, options)
  • filter:用于查找要删除的文档的查询条件。
  • options(可选):一个可选参数对象。

实例

db.myCollection.deleteOne({ name: "Alice" });

返回结果:

{
    "acknowledged": true,
    "deletedCount": 1
}

2、deleteMany()

deleteMany() 方法用于删除所有匹配过滤器的文档。

语法:

db.collection.deleteMany(filter, options)
  • filter:用于查找要删除的文档的查询条件。
  • options(可选):一个可选参数对象。

实例

db.myCollection.deleteMany({ status: "inactive" });

返回结果:

{
    "acknowledged": true,
    "deletedCount": 1
}

3、findOneAndDelete()

findOneAndDelete() 方法用于查找并删除单个文档,并可以选择返回删除的文档。

语法:

db.collection.findOneAndDelete(filter, options)
  • filter:用于查找要删除的文档的查询条件。
  • options:可选参数对象,如 projectionsort 等。

实例

db.myCollection.findOneAndDelete(
    { name: "Charlie" },
    { projection: { name: 1, age: 1 } }
);

findOneAndDelete 返回被删除的文档,如果找不到匹配的文档,则返回 null。

删除操作的选项

这些删除方法的 options 参数通常可以包含以下选项:

  • writeConcern:指定写操作的确认级别。
  • collation:指定比较字符串时使用的排序规则。
  • projection(仅适用于 findOneAndDelete):指定返回的字段。
  • sort(仅适用于 findOneAndDelete):指定排序顺序以确定要删除的文档。

实例

删除单个文档:

db.myCollection.deleteOne({ name: "Alice" });

删除多个文档:

db.myCollection.deleteMany({ status: "inactive" });

查找并删除单个文档:

db.myCollection.findOneAndDelete(
    { name: "Charlie" },
    { projection: { name: 1, age: 1 } }
);