全部速查表

MongoDB (mongosh) 命令速查

mongosh 快速参考:连接、CRUD、查询运算符、聚合管道、索引、副本集、用户管理与 dump/restore,并附带最常用的 shell 写法与实操示例。

30 条命令

连接与基本信息

mongosh "<uri>"

使用标准 URI 连接 MongoDB。

--quiet;--eval 'cmd';--file script.js;--apiVersion 1/2

mongosh "mongodb://app:[email protected]:27017/app_production?authSource=admin"
show dbs / use <db> / show collections

列出数据库;切换到一个数据库;列出当前库下的集合。

show dbs | use app | show collections
db.serverStatus() / db.stats()

服务端信息:连接数、操作计数、副本集状态等;db 统计:大小与集合数。

.pretty() 格式化输出;.verbose();.json;--eval 返回结果

db.serverStatus().connections && db.stats().dataSize

CRUD:读取

db.<coll>.find()

查询一个集合;可链式调用 .pretty() .limit() .skip() .sort() 整形结果。

.projection({name:1, email:1, _id:0});.sort({createdAt:-1});.limit(20);.skip(20);.count();.allowDiskUse()

db.orders.find({status:'paid', amount:{$gte:10}}).sort({createdAt:-1}).limit(20).pretty()
db.<coll>.findOne({...}) / db.<coll>.countDocuments({...})

读取单个文档,或统计匹配过滤条件的文档数。

findOne 可带/不带过滤条件;estimatedDocumentCount 是 O(1) 估算

db.users.findOne({email:'[email protected]'}, {pwd:0, _id:0}) && db.orders.countDocuments({status:'paid'})

CRUD:创建

db.<coll>.insertOne({...}) / insertMany([...])

插入一个或多个文档;选项 ordered:false 时即便出错也会写入剩余合法文档。

db.logs.insertMany([{k:'api', t:new Date()}, {k:'worker', t:new Date()}], {ordered:false})

CRUD:更新

db.<coll>.updateOne(filter, update, opts)

更新单个文档。可使用 $set $inc $push $pull $addToSet $rename $unset 等运算符。

upsert:true;arrayFilters:[] 用于嵌套数组;returnDocument:'after'(findOneAndUpdate)

db.users.updateOne({email:'[email protected]'}, {$inc:{loginCount:1}, $set:{lastSeen:new Date()}}, {upsert:true})
db.<coll>.updateMany(filter, update) / findOneAndUpdate

批量更新(底层是 bulk write);findOneAndUpdate 可原子地返回更新前/后的文档。

db.orders.updateMany({status:'pending', createdAt:{$lt:new Date(Date.now()-864e5)}}, {$set:{status:'cancelled'}})

CRUD:替换

db.<coll>.replaceOne(filter, replacement)

整体替换一个文档(_id 字段不可更改)。

db.users.replaceOne({email:'[email protected]'}, {name:'Alice', email:'[email protected]', role:'admin', tags:['vip']})

CRUD:删除

db.<coll>.deleteOne / deleteMany(filter)

删除匹配过滤条件的文档;deleteMany({}) 会清空整个集合(谨慎使用)。

db.sessions.deleteMany({lastSeen:{$lt:new Date(Date.now()-7*864e5)}}) && db.orders.deleteOne({_id:ObjectId('...')})

查询运算符

比较:$eq / $ne / $gt / $gte / $lt / $lte / $in / $nin

标准比较运算符;$in 用于匹配值列表。

db.orders.find({amount:{$gte:10,$lt:100}, status:{$in:['paid','shipped']}})
逻辑:$and / $or / $not / $nor

组合多个谓词;$not 仅作用于正则/元数据,正则需显式提供。

db.products.find({$or:[{sale:true,price:{$lt:50}},{tags:'vip'}]})
$exists / $type / $regex / $expr / $mod

字段级谓词:存在性、BSON 类型、正则匹配、聚合表达式比较($expr)、取模($mod)。

db.users.find({email:{$exists:true, $regex:'@example.com$', $options:'i'}})
db.<coll>.distinct(field, filter)

获取某字段的唯一取值(可附加过滤条件)。

db.orders.distinct('userId', {status:'paid'}).length

聚合

.aggregate([...])

构造聚合管道:$match → $group → $project → $sort → $limit → $lookup → $unwind → $facet。

.explain('executionStats');allowDiskUse:true;collation 文档

db.orders.aggregate([ { $match:{status:'paid'} }, { $group:{_id:'$userId', gmv:{$sum:'$amount'}, n:{$sum:1}} }, { $sort:{gmv:-1} }, { $limit:50} ])
$lookup / $graphLookup

跨集合连接($lookup)与递归树遍历($graphLookup)。

db.orders.aggregate([{$lookup:{from:'users', localField:'userId', foreignField:'_id', as:'user'}}, {$unwind:'$user'}, {$project:{total:1, 'user.name':1}}])
$bucket / $bucketAuto / $sample / $sortByCount

实用聚合阶段:分桶、采样、Top-N 计数。

db.events.aggregate([{$sample:{size:100}}, {$group:{_id:'$kind', n:{$sum:1}}}])

索引

db.<coll>.createIndex(spec, opts)

创建单字段 / 复合 / 地理 / 全文 / TTL 索引。

{unique:true, partialFilterExpression, sparse, expireAfterSeconds, weights, name}

db.users.createIndex({email:1}, {unique:true}) && db.events.createIndex({ts:1}, {expireAfterSeconds:7*86400}) && db.shops.createIndex({loc:'2dsphere'})
db.<coll>.getIndexes() / dropIndex / dropIndexes

列出索引;删除单个 / 全部索引(生产环境慎用 dropIndexes)。

db.users.getIndexes().forEach(i=>print(i.name, JSON.stringify(i.key)))
db.<coll>.explain('executionStats').find(filter)

查看获胜的执行计划与实际统计;关注 COLLSCAN、IXSCAN、FETCH、sort 阶段。

executionStats / queryPlanner / allPlansExecution;verbosity

db.orders.find({userId:42,createdAt:{$gte:new Date('2026-01-01')}}).sort({createdAt:-1}).explain('executionStats').queryPlanner.winningPlan
db.<coll>.hint({...})

强制优化器使用特定索引——排查坏计划与计划回退。

db.users.find({email:'[email protected]'}).hint({email:1}).explain()

运维

db.runCommand({...}) / db.adminCommand / db.command

直接执行 MongoDB 命令,覆盖 shell helper 没有覆盖的操作。

db.runCommand({listCollections:1, name:'app'}) && db.adminCommand({listDatabases:1}).databases.length
db.revokeRolesFromUser / grantRolesToUser

角色管理(在 admin 库下执行)。

use admin; db.createUser({user:'audit',pwd:'...',roles:[{role:'readAnyDatabase',db:'admin'}]})

副本集

rs.initiate() / rs.status()

初始化单节点副本集;查看副本集健康状态。

rs.initiate({_id:'rs0',members:[{_id:0,host:'m1:27017'}]});rs.status().myState

rs.initiate({_id:'rs0',members:[{_id:0,host:'m1:27017'},{_id:1,host:'m2:27017'},{_id:2,host:'m3:27017'}]})
rs.add / rs.remove / rs.stepDown

添加 / 移除成员;强制触发一次主节点选举以测试故障切换。

rs.add('m4:27017');rs.remove('m3:27017');rs.stepDown(60)

rs.add('m4.internal:27017') && rs.stepDown(60) && 在下一节点上 sh.status()

分片集群

sh.status() / sh.enableSharding

查看分片集群拓扑 / 在某个数据库上启用分片。

use admin; sh.enableSharding('analytics'); sh.shardCollection('analytics.events', {userId:1, ts:1})

备份与迁移

mongodump / mongorestore

逻辑备份 / 恢复。可用 --uri、--db、--archive 流式处理;--gzip 启用压缩。

--gzip;--archive=file.archive;--oplog 用于 PITR;--nsInclude/Exclude

mongodump --uri="mongodb://user:pw@m1:27017/?authSource=admin" --gzip --archive=/backup/app-2026-07-23.archive && mongorestore --gzip --archive=/backup/app.archive --nsInclude='app.*' --drop
mongoexport / mongoimport

以 JSON 或 CSV 格式导入 / 导出。可作为 Mongo 与其他系统间的格式转换管道。

--type=json|csv;--fields=a,b,c;--headerline;-q 过滤;--jsonArray(顶层数组)

mongoexport --uri="..." -d app -c orders --type=json -q '{"status":"paid"}' --out=orders.json && mongoimport --drop --jsonArray orders.json -d copy -c orders
mongotop / mongostat

实时监控:每个集合每秒读 / 写耗时;以及各种统计指标。

interval 秒数;--host

mongostat --host=m1.internal --authdb=admin --username=ops -i 5
db.shutdownServer()

在 admin 库下执行,干净停止 mongod——也可在 rm / 断电后用于恢复。

use admin;db.shutdownServer()(不支持 force;干净关机会等待 oplog 复制)

use admin; db.shutdownServer()

速查页版本 1.0.0

适用于 MongoDB 6.0+ / mongosh 1.6+