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()