MongoDB的操作语句围绕文档、集合、数据库三个核心层级展开,不同操作场景对应不同的语句语法,下面从基础操作到进阶用法逐步梳理常用语句。

基础数据库与集合操作
首先是最基础的数据库和集合管理语句,用于创建、切换、删除对应存储结构。
- 查看所有数据库:
show dbs - 切换或创建数据库:
use 数据库名,当数据库不存在时会自动创建,插入数据后才会在show dbs中显示 - 查看当前数据库下的所有集合:
show collections - 创建集合:
db.createCollection("集合名") - 删除当前数据库:
db.dropDatabase() - 删除指定集合:
db.集合名.drop()
文档增删改查操作
文档是MongoDB存储的核心单元,增删改查是最频繁使用的操作语句。
插入文档
插入单条文档使用insertOne方法,插入多条文档使用insertMany方法。
// 插入单条文档
db.user.insertOne({
name: "张三",
age: 25,
hobby: ["篮球", "阅读"]
})
// 插入多条文档
db.user.insertMany([
{ name: "李四", age: 28, hobby: ["足球"] },
{ name: "王五", age: 22, hobby: ["绘画", "音乐"] }
])
查询文档
查询使用find方法,可搭配查询条件、投影参数控制返回结果。
// 查询所有文档
db.user.find()
// 查询年龄大于25的文档,只返回name和age字段,_id不返回
db.user.find(
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
)
// 查询hobby包含篮球的文档
db.user.find({ hobby: "篮球" })
// 查询年龄大于等于22且小于等于28的文档
db.user.find({ age: { $gte: 22, $lte: 28 } })
更新文档
更新分为更新单条和多条,需要注意更新操作符的使用,避免直接覆盖整个文档。
// 更新单条文档,给张三增加一条爱好
db.user.updateOne(
{ name: "张三" },
{ $push: { hobby: "跑步" } }
)
// 更新所有年龄小于25的文档,年龄增加1岁
db.user.updateMany(
{ age: { $lt: 25 } },
{ $inc: { age: 1 } }
)
删除文档
删除操作需要谨慎使用,避免误删数据。
// 删除单条符合条件的文档
db.user.deleteOne({ name: "王五" })
// 删除所有年龄大于30的文档
db.user.deleteMany({ age: { $gt: 30 } })
聚合管道常用语句
聚合管道用于处理复杂的文档统计、转换需求,通过多个阶段串联完成数据处理。
// 统计每个爱好的用户数量,按数量降序排列
db.user.aggregate([
// 拆分hobby数组,每个元素生成一条新文档
{ $unwind: "$hobby" },
// 按hobby分组,统计每组数量
{ $group: { _id: "$hobby", user_count: { $sum: 1 } } },
// 按用户数量降序排序
{ $sort: { user_count: -1 } }
])
常用的聚合阶段还包括$match用于过滤文档、$project用于重命名字段或修改字段结构、$limit限制返回数量等。
索引操作语句
索引可以提升查询效率,常用语句包括创建、查看、删除索引。
// 创建单字段升序索引
db.user.createIndex({ age: 1 })
// 创建复合索引,先按年龄升序,再按姓名降序
db.user.createIndex({ age: 1, name: -1 })
// 创建唯一索引,确保name字段不重复
db.user.createIndex({ name: 1 }, { unique: true })
// 查看集合所有索引
db.user.getIndexes()
// 删除指定索引
db.user.dropIndex({ age: 1 })
// 删除所有索引(除了_id索引)
db.user.dropIndexes()