MongoDB 3.8 中需用兼容驱动(如 PyMongo 4.10+)和 Server 9.0+ 才支持新 API;增删改查操作须严格遵循语法:insertOne/insertMany、find(支持条件与投影)、updateOne/update(需 $set/$inc 避免覆写)、deleteOne/deleteMany(无回收站)。

要在 MongoDB 3.8 版本中完成基础文档级增删改查操作,必须使用支持该版本的驱动(如 PyMongo 4.10+ 或官方 Rust 驱动 v3.8),且连接的 MongoDB Server 必须为 9.0 或更高版本,否则部分新 API(如 String 索引)将不可用。
插入单条与多条文档
在当前数据库的 users 集合中插入一条用户记录:
db.users.insertOne({name: "张三", email: "zhangsan@example.com", created_at: new Date()})
插入多条时必须用 insertMany 并包裹数组,括号外不能加额外空格或换行符,否则 shell 会报语法错误:
db.users.insertMany([{name:"李四",age:28},{name:"王五",age:31}])
【注意:_id 字段若未显式指定,MongoDB 会自动生成 ObjectId;一旦写入,后续 update 不会自动更新 _id】
查询文档(含条件与投影)
方法一:查全部(不推荐用于生产环境,尤其集合数据量大时)
db.users.find()
方法二:带条件查询,例如找邮箱含 “example” 的用户:
db.users.find({email: {$regex: "example"}})
方法三:条件 + 投影(只返回 name 和 email 字段,排除 _id):
db.users.find({age: {$gte: 30}}, {name: 1, email: 1, _id: 0})
这一步执行后直接返回匹配结果,无额外提示或确认。
更新文档(精准控制修改范围)
第一步:用 $set 局部更新,避免覆盖整条文档
db.users.updateOne({name: "张三"}, {$set: {status: "active", updated_at: new Date()}})
第二步:批量更新所有匹配项,必须显式传 {multi: true} 参数(MongoDB 3.8 中仍沿用此写法,updateMany 是别名但非必需)
db.users.update({age: {$lt: 25}}, {$set: {tier: "starter"}}, {multi: true})
第三步:原子递增字段值,比如给用户点赞数加 1:
db.users.updateOne({name: "李四"}, {$inc: {likes: 1}})
若漏写 $inc 直接写 {likes: 1},会导致 likes 字段被覆写为固定值 1,而非累加。
删除文档
删除单条匹配记录(按 name 精确匹配):
db.users.deleteOne({name: "王五"})
删除所有年龄大于 40 的用户:
db.users.deleteMany({age: {$gt: 40}})
【警告:deleteMany 无回收站,执行后数据不可逆丢失】

















