删除 MongoDB 数据

MongoDBMongoDBBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何在 MongoDB 数据库中有效地删除数据。你将从删除单个文档开始,然后探索执行批量删除和根据特定条件删除数据的技术。最后,你将学习如何清空整个集合并验证删除结果。这些技能对于管理你的 MongoDB 数据库和维护数据完整性至关重要。

本实验涵盖以下步骤:删除单个文档、执行批量删除、按条件删除、清空集合数据以及验证删除结果。通过本实验,你将全面了解如何使用各种方法在 MongoDB 中删除数据,以满足你的需求。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/AggregationOperationsGroup(["Aggregation Operations"]) mongodb/BasicOperationsGroup -.-> mongodb/start_mongodb_shell("Start MongoDB Shell") mongodb/BasicOperationsGroup -.-> mongodb/delete_document("Delete Document") mongodb/BasicOperationsGroup -.-> mongodb/bulk_delete_documents("Bulk Delete Documents") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/AggregationOperationsGroup -.-> mongodb/aggregate_group_totals("Aggregate Group Totals") subgraph Lab Skills mongodb/start_mongodb_shell -.-> lab-420822{{"删除 MongoDB 数据"}} mongodb/delete_document -.-> lab-420822{{"删除 MongoDB 数据"}} mongodb/bulk_delete_documents -.-> lab-420822{{"删除 MongoDB 数据"}} mongodb/find_documents -.-> lab-420822{{"删除 MongoDB 数据"}} mongodb/query_with_conditions -.-> lab-420822{{"删除 MongoDB 数据"}} mongodb/aggregate_group_totals -.-> lab-420822{{"删除 MongoDB 数据"}} end

删除单个文档

在这一步中,我们将学习如何使用 deleteOne() 方法在 MongoDB 中删除单个文档。首先,启动 MongoDB shell:

mongosh

让我们创建一个包含一些文档的示例集合,以便练习删除操作:

use mylab_database
db.users.insertMany([
    { name: "John Doe", age: 30, email: "[email protected]" },
    { name: "Jane Smith", age: 25, email: "[email protected]" },
    { name: "Bob Johnson", age: 35, email: "[email protected]" }
])

示例输出:

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("..."),
    '1': ObjectId("..."),
    '2': ObjectId("...")
  }
}

要删除单个文档,我们将使用 deleteOne() 方法。此方法允许你根据唯一标识符或特定条件删除特定文档:

db.users.deleteOne({ name: "Jane Smith" })

预期输出:

{ acknowledged: true, deletedCount: 1 }

让我们分解这个命令:

  • deleteOne() 仅删除符合指定条件的第一个文档
  • 如果有多个文档符合条件,仅删除第一个
  • 该方法返回一个包含 acknowledged(操作是否成功)和 deletedCount(删除的文档数量)的对象

通过查找所有用户来验证删除操作:

db.users.find()

预期输出将仅显示 John Doe 和 Bob Johnson 的两个文档。

执行批量删除

在这一步中,我们将探索如何使用 MongoDB 中的 deleteMany() 方法一次性删除多个文档。

让我们创建一些示例数据:

use mylab_database
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() 删除所有状态为 "inactive" 的用户:

db.users.deleteMany({ status: "inactive" })

预期输出:

{ acknowledged: true, deletedCount: 3 }

关于 deleteMany() 的关键点:

  • 删除所有符合指定条件的文档
  • 返回删除的文档总数
  • 提供了一种高效的方式同时删除多条记录

验证剩余的文档:

db.users.find()

预期输出将仅显示集合中状态为 "active" 的用户。

按条件删除

在这一步中,我们将学习如何在 MongoDB 中使用复杂条件删除文档。

创建一个示例集合:

use mylab_database
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("...")
  }
}
  1. 删除年龄大于 40 的员工:
db.employees.deleteMany({ age: { $gt: 40 } })

预期输出:

{ acknowledged: true, deletedCount: 1 }

解释:

  • $gt 操作符表示“大于”
  • 此命令删除年龄大于 40 的文档
  1. 删除销售部门中薪资低于 55000 的员工:
db.employees.deleteMany({
    department: "Sales",
    salary: { $lt: 55000 }
})

预期输出:

{ acknowledged: true, deletedCount: 1 }

解释:

  • $lt 表示“小于”
  • 删除同时符合部门和薪资条件的文档

验证剩余的文档:

db.employees.find()

清空集合数据

在这一步中,我们将探索如何完全清空 MongoDB 集合中的数据。

创建一个示例集合:

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
])

方法 1:使用 deleteMany() 删除所有文档:

db.products.deleteMany({})

预期输出:

{ acknowledged: true, deletedCount: 3 }

解释:

  • 删除所有文档,但不会删除集合结构
  • 空过滤器 {} 会匹配所有文档

验证集合是否为空:

db.products.find()

方法 2:使用 drop() 删除整个集合:

让我们重新插入示例数据:

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
])

删除集合:

db.products.drop()

预期输出:

true

解释:

  • 完全删除集合及其元数据
  • 永久删除整个集合

尝试查找集合:

db.products.find()

这将导致错误,表明集合已不存在。

验证删除结果

在这最后一步中,我们将探索如何在 MongoDB 中验证删除操作。

创建一个示例集合:

db.employees.insertMany([
    { name: "Alice", department: "HR", salary: 50000 },
    { name: "Bob", department: "Sales", salary: 45000 },
    { name: "Charlie", department: "Marketing", salary: 55000 },
    { name: "David", department: "Sales", salary: 40000 }
])
  1. 删除低薪员工并验证:
db.employees.deleteMany({ salary: { $lt: 45000 } })
const remainingEmployees = db.employees.countDocuments()
print("Remaining employees:", remainingEmployees)

预期输出:

Remaining employees: 5
  1. 使用 find() 验证删除:
const lowSalaryEmployees = db.employees.find({ salary: { $lt: 45000 } }).count()
print("Low salary employees after deletion:", lowSalaryEmployees)

预期输出:

Low salary employees after deletion: 0
  1. 检查特定部门的员工数量:
const salesEmployees = db.employees.countDocuments({ department: "Sales" })
print("Sales department employees:", salesEmployees)

预期输出:

Sales department employees: 1

全面验证:

print("Total employees:", db.employees.countDocuments())
print("Employees by department:")
db.employees.aggregate([
    { $group: { _id: "$department", count: { $sum: 1 } } }
])

预期输出将显示员工总数以及按部门的分类统计。

[
  { _id: 'Marketing', count: 2 },
  { _id: 'Sales', count: 1 },
  { _id: 'HR', count: 2 }
]

总结

在本实验中,你学习了如何使用 deleteOne() 方法删除单个文档,该方法会删除符合指定条件的第一个文档。你还探索了如何使用 deleteMany() 方法执行批量删除,从而高效地移除符合特定条件的多条记录。此外,你还学习了如何按条件删除文档、清空整个集合的数据,以及如何验证删除结果。

本实验的关键要点是 MongoDB 中删除数据的不同方法,从删除单个文档到根据特定条件执行批量删除。这些技能对于有效管理数据库和维护数据完整性至关重要。