介绍
在本实验中,你将学习如何在 MongoDB 数据库中有效地删除数据。你将从删除单个文档开始,然后探索执行批量删除和根据特定条件删除数据的技术。最后,你将学习如何清空整个集合并验证删除结果。这些技能对于管理你的 MongoDB 数据库和维护数据完整性至关重要。
本实验涵盖以下主题:使用 deleteOne() 删除单个文档,使用 deleteMany() 删除多个文档,使用查询操作符进行条件删除,以及使用 deleteMany({}) 或 drop() 清空集合。完成本实验后,你将对如何使用各种方法在 MongoDB 中删除数据有扎实的理解。
删除单个文档
在本步骤中,你将学习如何从 MongoDB 集合中删除单个文档。首先,你需要连接到 MongoDB shell 并准备一些示例数据。
在终端中运行以下命令来启动 MongoDB shell:
mongosh
进入 shell 后,你将创建一个新数据库和一个包含几个文档的集合。
use mylab_database
创建一个包含几个文档的新集合。
db.users.insertMany([
{ name: "John Doe", age: 30, email: "john@example.com" },
{ name: "Jane Smith", age: 25, email: "jane@example.com" },
{ name: "Bob Johnson", age: 35, email: "bob@example.com" }
]);
输出确认已插入三个文档。
{
"acknowledged": true,
"insertedIds": {
"0": ObjectId("..."),
"1": ObjectId("..."),
"2": ObjectId("...")
}
}
现在,要删除单个文档,请使用 deleteOne() 方法。此方法查找与指定过滤器匹配的第一个文档并将其删除。让我们删除 "Jane Smith" 的文档。
db.users.deleteOne({ name: "Jane Smith" });
输出表明一个文档已成功删除。
{ "acknowledged": true, "deletedCount": 1 }
deleteOne(): 此方法仅删除与过滤器条件匹配的第一个文档。{ name: "Jane Smith" }: 这是指定要删除文档的过滤器。deletedCount: 1: 这确认已删除一个文档。
为了验证文档是否已被删除,你可以列出 users 集合中所有剩余的文档。
db.users.find();
输出现在将只显示两个文档,确认 "Jane Smith" 已被移除。
删除多个文档
在上一个步骤中,你删除了一个文档。现在,你将学习如何使用 deleteMany() 方法一次删除多个文档。这对于批量删除操作非常有用,例如清理具有特定状态的记录。
首先,让我们向 users 集合添加一些新文档。这些文档将包含一个 status 字段,我们将使用它来进行批量删除操作。
db.users.insertMany([
{ name: "Alice Wilson", age: 28, status: "inactive" },
{ name: "Charlie Brown", age: 40, status: "inactive" },
{ name: "David Lee", age: 35, status: "active" },
{ name: "Eve Taylor", age: 45, status: "inactive" }
]);
输出将确认已插入四个新文档。
{
"acknowledged": true,
"insertedIds": {
"0": ObjectId("..."),
"1": ObjectId("..."),
"2": ObjectId("..."),
"3": ObjectId("...")
}
}
现在,使用 deleteMany() 方法删除所有 status 为 "inactive" 的用户。
db.users.deleteMany({ status: "inactive" });
输出显示删除了三个文档。
{ "acknowledged": true, "deletedCount": 3 }
deleteMany(): 此方法删除所有与过滤器条件匹配的文档。{ status: "inactive" }: 此过滤器针对status字段为 "inactive" 的所有文档。
为了确认批量删除,请列出集合中所有剩余的文档。
db.users.find();
输出将仅显示那些不处于 "inactive" 状态的文档,这表明批量删除已成功。
使用条件删除文档
MongoDB 允许你使用强大的查询运算符根据更复杂的条件删除文档。在本步骤中,你将学习如何使用 $gt(大于)和 $lt(小于)等运算符执行条件删除。
首先,让我们创建一个名为 employees 的新集合,并包含一些示例数据。
db.employees.insertMany([
{ name: "John Doe", age: 25, department: "Sales", salary: 50000 },
{ name: "Jane Smith", age: 35, department: "Marketing", salary: 60000 },
{ name: "Bob Johnson", age: 45, department: "Sales", salary: 55000 },
{ name: "Alice Brown", age: 30, department: "HR", salary: 52000 }
]);
输出将确认已插入四个文档。
{
"acknowledged": true,
"insertedIds": {
"0": ObjectId("..."),
"1": ObjectId("..."),
"2": ObjectId("..."),
"3": ObjectId("...")
}
}
现在,让我们执行一个条件删除。我们将删除所有年龄大于 40 岁的员工。
db.employees.deleteMany({ age: { $gt: 40 } });
输出表明已删除一个文档。
{ "acknowledged": true, "deletedCount": 1 }
{ age: { $gt: 40 } }: 此过滤器使用$gt运算符选择age字段大于 40 的文档。
接下来,让我们执行一个基于多个条件的删除。我们将删除 "Sales" 部门中薪资低于 55,000 的员工。
db.employees.deleteMany({
department: "Sales",
salary: { $lt: 55000 }
});
输出确认又删除了一个文档。
{ "acknowledged": true, "deletedCount": 1 }
- 此命令结合了两个条件:
department必须是 "Sales",并且salary必须小于 55,000(使用$lt运算符)。
为了验证结果,请查看 employees 集合中剩余的文档。
db.employees.find();
输出将仅显示未满足删除条件的两个员工。
清空集合中的所有数据
有时你可能需要从集合中删除所有文档。MongoDB 提供了两种主要方法来实现此目的:使用 deleteMany({}) 删除所有文档,或使用 drop() 删除整个集合。
首先,让我们创建一个新的 products 集合并添加一些示例数据。
db.products.insertMany([
{ name: "Laptop", price: 1000, category: "Electronics" },
{ name: "Smartphone", price: 500, category: "Electronics" },
{ name: "Headphones", price: 100, category: "Electronics" }
]);
方法一:使用 deleteMany() 删除所有文档
你可以通过将一个空的过滤器 {} 传递给 deleteMany() 方法来删除集合中的所有文档。这种方法会删除数据,但会保留集合本身,包括其索引。
db.products.deleteMany({});
输出显示已删除所有三个文档。
{ "acknowledged": true, "deletedCount": 3 }
你可以通过运行 find() 查询来验证集合现在是否为空。
db.products.find();
此命令将不返回任何文档。
方法二:使用 drop() 删除整个集合
drop() 方法更具破坏性。它会完全删除集合,包括其所有文档、索引和相关的元数据。
首先,让我们重新插入示例数据,以便有一个集合可以删除。
db.products.insertMany([
{ name: "Laptop", price: 1000, category: "Electronics" },
{ name: "Smartphone", price: 500, category: "Electronics" },
{ name: "Headphones", price: 100, category: "Electronics" }
]);
现在,完全删除 products 集合。
db.products.drop();
输出 true 确认集合已成功删除。
true
如果你现在尝试查询 products 集合,它将不会返回任何结果,因为该集合已不存在。
db.products.find();
此命令将不产生任何输出,因为集合已消失。要退出 mongosh shell,你可以输入 exit 或按 Ctrl+D。
总结
在本实验中,你学习了 MongoDB 中删除数据的基本技术。你首先使用 deleteOne() 方法根据特定过滤器删除单个文档。然后,你使用 deleteMany() 进行批量删除,该方法可以高效地删除符合条件的多个文档。你还探索了如何使用 $gt 和 $lt 等查询运算符执行更复杂的条件删除。最后,你学习了两种清空集合的方法:使用 deleteMany({}) 删除所有文档同时保留集合结构,以及使用 drop() 永久删除整个集合。
这些技能对于数据库管理至关重要,它们使你能够管理数据生命周期、清理不必要的记录并维护 MongoDB 数据库的整体健康状况。

