Skip to content

MongoDB CRUD 操作

创建(Create)

insertOne — 插入单个文档

js
db.users.insertOne({
  name: "Alice",
  age: 30,
  email: "alice@example.com",
  tags: ["engineer", "beijing"]
})
// { acknowledged: true, insertedId: ObjectId('...') }

insertMany — 批量插入

js
db.users.insertMany([
  { name: "Bob", age: 25, email: "bob@example.com" },
  { name: "Charlie", age: 35, email: "charlie@example.com" }
])
// { acknowledged: true, insertedIds: { '0': ..., '1': ... } }

集合不存在时自动创建。批量插入中某条文档失败,已插入的默认不回滚,可用 { ordered: false } 忽略错误继续插入。

查询(Read)

find — 基本查询

js
// 查询所有
db.users.find()

// 等值查询
db.users.find({ name: "Alice" })

// 返回单个
db.users.findOne({ name: "Alice" })

比较操作符

js
// 大于
db.users.find({ age: { $gt: 25 } })
// 大于等于
db.users.find({ age: { $gte: 25 } })
// 小于
db.users.find({ age: { $lt: 30 } })
// 不等于
db.users.find({ name: { $ne: "Alice" } })
// 在列表中
db.users.find({ age: { $in: [25, 30, 35] } })

逻辑操作符

js
// AND — 多个条件默认就是 AND
db.users.find({ age: { $gte: 25 }, city: "Beijing" })

// OR
db.users.find({
  $or: [
    { age: { $lt: 25 } },
    { city: "Shanghai" }
  ]
})

// NOT
db.users.find({ age: { $not: { $gte: 30 } } })

// 组合
db.users.find({
  city: "Beijing",
  $or: [{ age: { $lt: 25 } }, { age: { $gt: 50 } }]
})

数组查询

js
// 精确匹配整个数组
db.users.find({ tags: ["mongodb", "nosql"] })

// 匹配数组中任一元素
db.users.find({ tags: "mongodb" })

// 匹配数组中所有元素
db.users.find({ tags: { $all: ["mongodb", "nosql"] } })

// 按数组长度
db.users.find({ tags: { $size: 3 } })

// 嵌套文档匹配
db.users.find({ "address.city": "Beijing" })

投影(字段筛选)

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

// 排除指定字段
db.users.find({}, { password: 0 })

游标方法

js
// 排序:1 升序,-1 降序
db.users.find().sort({ age: -1 })

// 跳过和限制(分页)
db.users.find().skip(10).limit(5)

// 去重计数
db.users.distinct("city")
db.users.countDocuments({ age: { $gte: 25 } })

更新(Update)

updateOne — 更新单个

js
db.users.updateOne(
  { name: "Alice" },           // 过滤条件
  { $set: { age: 31, city: "Shanghai" } }  // 更新操作
)

updateMany — 更新多个

js
db.users.updateMany(
  { age: { $lt: 25 } },
  { $inc: { age: 1 } }        // 自增
)

replaceOne — 替换整个文档

js
db.users.replaceOne(
  { name: "Alice" },
  { name: "Alice", age: 32, email: "alice_new@example.com", city: "Beijing" }
)

常用更新操作符

操作符作用示例
$set设置字段值{ $set: { city: "Beijing" } }
$unset删除字段{ $unset: { temp: "" } }
$inc自增{ $inc: { views: 1 } }
$push数组追加{ $push: { tags: "new" } }
$pull数组移除{ $pull: { tags: "old" } }
$rename重命名字段{ $rename: { oldName: "newName" } }
$min / $max条件更新{ $min: { score: 60 } }
js
// $push + $each 批量追加
db.users.updateOne(
  { name: "Alice" },
  { $push: { tags: { $each: ["golang", "k8s"] } } }
)

// upsert — 不存在则插入
db.users.updateOne(
  { name: "David" },
  { $set: { age: 28 } },
  { upsert: true }
)

删除(Delete)

js
// 删除单个
db.users.deleteOne({ name: "Alice" })

// 删除多个
db.users.deleteMany({ age: { $lt: 18 } })

// 删除全部文档(保留集合)
db.users.deleteMany({})

// 删除集合
db.users.drop()

参考