MongoDB CRUD 操作详解:基础教程 – wiki基地

MongoDB CRUD 操作详解:基础教程

引言

在当今数据驱动的世界中,数据库技术扮演着核心角色。MongoDB 作为一款领先的 NoSQL 数据库,以其灵活的文档模型、高可扩展性和强大的性能,受到了广大开发者和企业的青睐。与传统的关系型数据库不同,MongoDB 存储 BSON (Binary JSON) 格式的文档,这种无模式(schema-less)的特性使得开发更加敏捷,能够轻松适应不断变化的数据需求。

无论您是初学者还是经验丰富的开发者,掌握数据库的基本操作都至关重要。本文将详细讲解 MongoDB 中的 CRUD 操作:创建(Create)、读取(Read),更新(Update)和删除(Delete),这些是与数据库进行交互的核心功能。通过本文的学习,您将能够熟练地在 MongoDB 中管理数据。

CRUD 操作概述

CRUD 是指数据库应用程序中的四项基本功能:

  • Create (创建):向数据库中添加新的数据记录。在 MongoDB 中,这通常涉及插入文档到集合(Collection)中。
  • Read (读取):从数据库中检索数据。这包括根据特定条件查询文档,并可以对结果进行过滤、排序和投影。
  • Update (更新):修改数据库中已有的数据记录。您可以更新单个文档或符合特定条件的多个文档。
  • Delete (删除):从数据库中移除数据记录。这可以删除单个文档、多个文档,甚至整个集合。

理解并熟练运用这四项操作,是高效使用 MongoDB 的基础。接下来,我们将逐一深入探讨这些操作的具体实现。

C – Create (创建操作)

创建操作是将新文档添加到 MongoDB 集合中的过程。在 MongoDB Shell 中,我们主要使用 insertOne()insertMany() 方法。

插入单个文档 (insertOne())

insertOne() 方法用于向集合中插入一个新文档。如果指定的集合不存在,MongoDB 会在第一次插入操作时自动创建它。

语法:

javascript
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

示例:

假设我们有一个名为 users 的集合,现在向其中插入一个用户文档:

javascript
use myDatabase; // 切换或创建数据库
db.users.insertOne(
{
name: "Alice",
age: 30,
city: "New York",
status: "active"
}
);

执行上述命令后,MongoDB 会返回一个包含新插入文档的 _id 字段的结果。_id 是 MongoDB 自动生成的主键,用于唯一标识文档。

插入多个文档 (insertMany())

insertMany() 方法用于向集合中插入多个文档。它接受一个文档数组作为参数。

语法:

javascript
db.collection.insertMany(
[ <document1>, <document2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)

示例:

users 集合插入多个用户文档:

javascript
db.users.insertMany([
{
name: "Bob",
age: 24,
city: "Los Angeles",
status: "active"
},
{
name: "Charlie",
age: 35,
city: "Chicago",
status: "inactive"
},
{
name: "David",
age: 29,
city: "Houston",
status: "active"
}
]);

insertMany() 操作会返回一个包含所有新插入文档 _id 的结果。通过这些创建操作,您可以方便地将数据填充到 MongoDB 数据库中。

R – Read (读取操作)

读取操作是检索存储在 MongoDB 集合中的文档的过程。这是最常用的操作之一,MongoDB 提供了强大而灵活的查询功能。

查找单个文档 (findOne())

findOne() 方法用于返回符合查询条件的单个文档。如果没有匹配的文档,则返回 null。如果有多个匹配文档,它会返回第一个匹配到的文档。

语法:

javascript
db.collection.findOne(query, projection)

  • query: (可选) 查询条件,用于查找要查找的文档的条件。
  • projection: (可选) 投影,指定要返回的字段。

示例:

查找 name 为 “Alice” 的用户文档:

javascript
db.users.findOne({ name: "Alice" });

查找多个文档 (find())

find() 方法用于返回符合查询条件的多个文档。它返回一个游标 (cursor),您可以通过迭代游标来访问这些文档。

语法:

javascript
db.collection.find(query, projection)

示例:

  1. 查找所有文档:

    javascript
    db.users.find();

  2. 查找具有特定条件的文档:

    查找 age 大于 25 的所有用户:

    javascript
    db.users.find({ age: { $gt: 25 } }); // $gt 表示 "greater than" (大于)

    一些常用的查询操作符包括:
    * $eq: 等于 (默认行为,可以省略)
    * $ne: 不等于
    * $gt: 大于
    * $gte: 大于或等于
    * $lt: 小于
    * $lte: 小于或等于
    * $in: 匹配数组中的任意一个值
    * $nin: 不匹配数组中的任何值

  3. 使用逻辑 AND ($and) 和 OR ($or):

    查找 age 大于 25 并且 status 为 “active” 的用户:

    javascript
    db.users.find({ age: { $gt: 25 }, status: "active" }); // 默认是逻辑 AND

    查找 city 是 “New York” 或 “Los Angeles” 的用户:

    javascript
    db.users.find({ $or: [{ city: "New York" }, { city: "Los Angeles" }] });

投影 (Projection)

投影允许您指定在查询结果中包含(或排除)哪些字段。这有助于减少网络传输的数据量,并使查询结果更简洁。

示例:

只返回 namecity 字段,并排除默认的 _id 字段:

javascript
db.users.find({}, { name: 1, city: 1, _id: 0 }); // 1 表示包含,0 表示排除

排序 (Sorting)

sort() 方法用于对查询结果进行排序。它接受一个文档作为参数,其中包含要排序的字段和排序顺序(1 为升序,-1 为降序)。

示例:

age 降序排列所有用户:

javascript
db.users.find().sort({ age: -1 });

组合查询、投影和排序的示例:

javascript
db.users.find({ status: "active" }, { name: 1, age: 1, _id: 0 }).sort({ age: 1 });

U – Update (更新操作)

更新操作用于修改 MongoDB 集合中已有的文档。您可以根据查询条件更新单个或多个文档。

更新单个文档 (updateOne())

updateOne() 方法用于更新集合中符合指定条件的第一个文档。

语法:

javascript
db.collection.updateOne(
<filter>,
<update>,
<options>
)

  • filter: 查询条件,用于查找要更新的文档。
  • update: 更新操作,指定要对匹配文档进行的修改。通常使用更新操作符。
  • options: (可选) 其他选项,例如 upsert(如果文档不存在则插入)。

示例:

name 为 “Alice” 的用户的 age 更新为 31,并添加 status 字段为 “active”:

javascript
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 31, status: "active" } }
);

更新多个文档 (updateMany())

updateMany() 方法用于更新集合中所有符合指定条件的文档。

语法:

javascript
db.collection.updateMany(
<filter>,
<update>,
<options>
)

示例:

将所有 status 为 “active” 的用户的 last_updated 字段设置为当前日期:

javascript
db.users.updateMany(
{ status: "active" },
{ $set: { last_updated: new Date() } }
);

常用更新操作符

update 参数中,我们通常会使用各种更新操作符来指定如何修改文档的字段。

  • $set: 设置字段的值。如果字段不存在,则创建该字段。

    javascript
    db.users.updateOne(
    { name: "Bob" },
    { $set: { city: "San Francisco" } }
    );

  • $inc: 对现有字段的值进行增量操作。如果字段不存在,则创建该字段并设置其值为指定的增量。

    javascript
    db.users.updateOne(
    { name: "David" },
    { $inc: { age: 1 } } // 将 David 的年龄增加 1
    );

  • $unset: 删除文档中的指定字段。

    javascript
    db.users.updateOne(
    { name: "Charlie" },
    { $unset: { status: "" } } // 删除 Charlie 的 status 字段
    );

  • $push: 向数组字段的末尾添加一个值。如果字段不存在,则创建该字段并将其设置为包含指定值的新数组。

    javascript
    db.products.updateOne(
    { name: "Laptop" },
    { $push: { tags: "electronics" } }
    );

  • $pull: 从现有数组中删除与指定值匹配的所有实例。

    javascript
    db.products.updateOne(
    { name: "Laptop" },
    { $pull: { tags: "old_tag" } }
    );

这些操作符使得更新文档变得非常灵活和强大。

D – Delete (删除操作)

删除操作用于从 MongoDB 集合中移除文档或整个集合。

删除单个文档 (deleteOne())

deleteOne() 方法用于删除集合中符合指定条件的第一个文档。

语法:

javascript
db.collection.deleteOne(
<filter>,
<options>
)

  • filter: 查询条件,用于查找要删除的文档。
  • options: (可选) 其他选项。

示例:

删除 name 为 “Charlie” 的用户文档:

javascript
db.users.deleteOne({ name: "Charlie" });

删除多个文档 (deleteMany())

deleteMany() 方法用于删除集合中所有符合指定条件的文档。

语法:

javascript
db.collection.deleteMany(
<filter>,
<options>
)

示例:

删除所有 status 为 “inactive” 的用户文档:

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

删除集合中的所有文档:

如果 filter 参数为空文档 {}deleteMany() 将删除集合中的所有文档。

javascript
db.users.deleteMany({}); // 删除 users 集合中的所有文档

删除集合 (drop())

drop() 方法用于删除整个集合,包括其所有文档和索引。这是一个非常彻底的操作,请谨慎使用。

语法:

javascript
db.collection.drop()

示例:

删除 users 集合:

javascript
db.users.drop();

执行 drop() 后,如果集合不存在,则返回 false;如果成功删除,则返回 true

总结

通过本文,我们详细探讨了 MongoDB 中最基本的四大操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete),即 CRUD 操作。我们学习了如何:

  • 使用 insertOne()insertMany() 向集合中插入单个或多个文档。
  • 使用 findOne()find() 来检索文档,并通过查询条件、投影和排序来精确控制结果。
  • 使用 updateOne()updateMany() 更新单个或多个文档,并掌握了 $set, $inc, $unset, $push, $pull 等常用更新操作符。
  • 使用 deleteOne()deleteMany() 删除文档,以及使用 drop() 删除整个集合。

这些 CRUD 操作是您与 MongoDB 数据库进行有效交互的基础。熟练掌握它们将使您能够管理和操作数据,为构建强大、灵活的应用程序奠定坚实的基础。随着您对 MongoDB 的深入了解,您还将探索更高级的功能,例如聚合框架、索引、事务和复制等,进一步提升您的数据库技能。

希望这篇基础教程能帮助您更好地理解和使用 MongoDB!


我已生成了关于 “MongoDB CRUD 操作详解:基础教程” 的文章。由于我当前工具的限制,我无法直接将此内容写入文件。请您将上述 Markdown 内容复制并粘贴到您希望保存的文件中。

滚动至顶部