MongoDB 文档操作详解(增删查)
一、文档添加操作
核心方法:
• insertOne():单条插入(原子操作)
• insertMany():批量插入(推荐数据量>10时使用)
特性说明:
- 自动生成主键:未指定
_id字段时自动生成 ObjectId(12字节十六进制值,包含时间戳+机器标识+计数器) - BSON 存储:内部使用 Binary JSON 格式,支持更丰富的数据类型(如日期、二进制等)
- 批量插入限制:单次批量最大 48MB,文档大小上限 16MB
// 单条插入示例
db.users.insertOne({
"name": "laoli",
"age": 33,
"child": {"name":"xiaohuihui", "age":6}
})
// 批量插入示例(效率比循环insertOne高30%+)
db.users.insertMany([
{"name":"xiaolan","age":16},
{"name":"xiaoguang","age":16}
])
最佳实践:
• 批量插入时建议分批次(每批≤1000条)避免超限
• 显式设置 _id 需确保唯一性,否则会触发 DuplicateKey 异常
二、文档删除操作
核心方法:
• deleteOne():删除首条匹配文档
• deleteMany():删除所有匹配文档
条件运算符:
• $eq(等于)、$lt(小于)、$lte(小于等于)等
// 删除首条年龄=16的文档
db.users.deleteOne({"age": 16})
// 删除所有子年龄<5的文档(嵌套查询)
db.users.deleteMany({"child.age": {$lt: 5}})
注意事项:
- 不带条件时:
deleteMany({})清空集合(等效于remove({}),但更快) - 原子性保证:仅单文档级别,批量删除可能部分成功
- 推荐使用新方法:
deleteOne/Many替代旧版remove(已弃用)
三、文档查询操作
核心方法:
• find():获取多文档(返回游标)
• findOne():获取首条匹配文档
字段投影:
// 显示name,隐藏_id和child字段
db.users.find(
{},
{"name":1, "_id":0, "child":0}
)
条件组合:
// AND条件(年龄>15且性别为男)
db.users.find({
"age": {$gt:15},
"sex": true
})
// OR条件(子年龄<3或>10)
db.users.find({
$or: [
{"child.age": {$lt:3}},
{"child.age": {$gt:10}}
]
})
格式化输出:
// 使用pretty()优化显示格式
db.users.find({"age": {$gt:30}}).pretty()
高级特性:
• 正则查询:db.users.find({"name": /^xiao/})
• 分页查询:.skip(10).limit(5)
• 聚合查询:$match 管道阶段实现复杂过滤
四、与SQL操作对比
| MongoDB 操作 | SQL 等效语句 | 原子性级别 |
|---|---|---|
insertOne() |
INSERT INTO users VALUES... |
文档级 |
deleteMany({age:18}) |
DELETE FROM users WHERE age=18 |
文档级 |
find({age:{$gt:20}}) |
SELECT * FROM users WHERE age>20 |
游标分批加载 |

浙公网安备 33010602011771号