MongoDB 文档操作详解(增删查)

一、文档添加操作

核心方法
insertOne():单条插入(原子操作)
insertMany():批量插入(推荐数据量>10时使用)

特性说明

  1. 自动生成主键:未指定 _id 字段时自动生成 ObjectId(12字节十六进制值,包含时间戳+机器标识+计数器)
  2. BSON 存储:内部使用 Binary JSON 格式,支持更丰富的数据类型(如日期、二进制等)
  3. 批量插入限制:单次批量最大 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}})

注意事项

  1. 不带条件时:deleteMany({}) 清空集合(等效于 remove({}),但更快)
  2. 原子性保证:仅单文档级别,批量删除可能部分成功
  3. 推荐使用新方法: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 游标分批加载

posted @ 2025-03-26 21:25  千陌666  阅读(42)  评论(0)    收藏  举报