掌握MongoDB CRUD操作:新手必学的4种基础操作

前提准备:MongoDB基础入门

在开始学习CRUD操作前,我们先简单了解MongoDB的特点:它是一款文档型数据库,数据以JSON格式(BSON)存储,没有固定的表结构,每个数据单元称为“文档”,存放在“集合”(Collection)中。

操作前准备
1. 打开MongoDB服务(本地默认无需额外配置),在命令行输入 mongo 进入Mongo Shell。
2. 切换到目标数据库(如 use mydb,若不存在则自动创建)。
3. 选择要操作的集合(如 db.users,若不存在则插入数据时自动创建)。

1. Create(创建):向集合插入数据

创建操作的核心是向集合中添加新文档,常用方法:

1.1 插入单条数据:insertOne()

语法:db.集合名.insertOne(文档对象)

示例:向 users 集合插入一个用户信息:

// 插入单条文档
db.users.insertOne({
  name: "张三",
  age: 20,
  email: "zhangsan@example.com"
})

返回结果

{
  "acknowledged": true,  // 操作确认
  "insertedId": "650a0b12c3d4e5f6a7b8c9d0",  // 自动生成的唯一ID(_id)
  "insertedCount": 1
}

1.2 插入多条数据:insertMany()

语法:db.集合名.insertMany([文档1, 文档2, ...])

示例:插入两条用户数据:

db.users.insertMany([
  { name: "李四", age: 22, email: "lisi@example.com" },
  { name: "王五", age: 21, email: "wangwu@example.com" }
])

返回结果

{
  "acknowledged": true,
  "insertedIds": [
    "650a0b12c3d4e5f6a7b8c9d1",
    "650a0b12c3d4e5f6a7b8c9d2"
  ],
  "insertedCount": 2
}

2. Read(读取):查询集合数据

读取操作用于获取集合中的数据,核心是 find() 方法,支持条件过滤、字段筛选、排序等。

2.1 查询所有文档:find()

语法:db.集合名.find(查询条件, {字段投影})

  • 查询条件:空对象 {} 表示查询所有文档。
  • 字段投影{字段名: 1} 表示返回该字段,{字段名: 0} 表示排除该字段(_id 默认返回,需显式设为0排除)。

示例:查询 users 集合中所有用户信息,并只返回 nameage

// 1. 查询所有文档,返回所有字段
db.users.find()

// 2. 只返回name和age(排除_id)
db.users.find({}, { name: 1, age: 1, _id: 0 })

2.2 带条件查询:

通过条件过滤文档,常用操作符:等于(=)大于(>)小于(<)不等于(!=)包含(in)等。

示例:查询年龄为20的用户:

db.users.find({ age: 20 })  // 条件为age=20

示例:查询年龄大于21的用户:

db.users.find({ age: { $gt: 21 } })  // $gt 表示大于

2.3 排序、限制数量:

  • 排序sort({字段: 1})(1=升序,-1=降序)。
  • 限制数量limit(n)(只返回前n条)。

示例:查询年龄小于25的用户,按年龄升序排列,只返回前2条:

db.users.find({ age: { $lt: 25 } })
  .sort({ age: 1 })  // 升序排序
  .limit(2)          // 限制返回2条

3. Update(更新):修改集合数据

更新操作需明确修改规则(条件)和修改方式(操作符),常用方法:

3.1 更新单条数据:updateOne()

语法:db.集合名.updateOne(查询条件, {修改操作})

常用修改操作符
- $set:覆盖字段(如修改name、age)。
- $inc:自增字段(如age+1)。

示例:将姓名为“张三”的用户年龄+1:

db.users.updateOne(
  { name: "张三" },  // 查询条件:name=张三
  { $inc: { age: 1 } }  // 修改操作:age自增1
)

示例:将姓名为“李四”的用户姓名改为“李华”:

db.users.updateOne(
  { name: "李四" },
  { $set: { name: "李华" } }  // 修改name字段
)

3.2 更新多条数据:updateMany()

语法:db.集合名.updateMany(查询条件, {修改操作})

示例:将所有年龄小于22的用户年龄设为22:

db.users.updateMany(
  { age: { $lt: 22 } },  // 条件:age<22
  { $set: { age: 22 } }  // 覆盖age字段
)

4. Delete(删除):移除集合数据

删除操作需谨慎,避免误删,常用方法:

4.1 删除单条数据:deleteOne()

语法:db.集合名.deleteOne(查询条件)

示例:删除姓名为“王五”的用户:

db.users.deleteOne({ name: "王五" })

4.2 删除多条数据:deleteMany()

语法:db.集合名.deleteMany(查询条件)

示例:删除所有年龄大于22的用户:

db.users.deleteMany({ age: { $gt: 22 } })

4.3 清空集合(危险操作!):

删除所有文档(需确认集合中无重要数据):

db.users.deleteMany({})  // 空条件表示删除所有文档

总结

MongoDB的CRUD操作是数据管理的基础,核心是:
- Create:用 insertOne/insertMany 插入文档。
- Read:用 find 带条件、投影、排序查询数据。
- Update:用 updateOne/updateMany 配合 $set/$inc 等操作符修改。
- Delete:用 deleteOne/deleteMany 带条件删除,避免误删。

练习建议:新建一个 students 集合,尝试完成“插入3条学生数据→查询年龄18岁以上的学生→将所有18岁学生年龄+1→删除所有女生数据”的完整流程,熟悉各操作细节。

通过基础操作,你已能独立完成MongoDB数据的增删改查,后续可学习索引、聚合管道等进阶功能~

小夜