全部速查表

MongoDB (mongosh) 命令速查

mongosh 快速參考:連線、CRUD、查詢運算子、聚合管線、索引、副本集、使用者與匯出/還原——附最常見的 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()

伺服器資訊:連線、操作計數、副本狀態;資料庫統計:大小與集合。

.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

批次更新多筆文件(為批次寫入);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 僅用於 regex/中繼資料,regex 需明確使用正則物件。

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

跨集合 join($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

列出索引;移除單一或全部(正式環境請三思)。

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({...})

強制 planner 使用指定索引——用於排查糟糕的計畫或計畫回歸。

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

維護

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

直接執行 MongoDB 指令——shell helper 沒有對應 API 時的逃生口。

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 可達時間點還原;--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

即時監控:每秒每個集合花費在讀/寫的時間;統計資料。

間隔秒數;--host

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

在 admin 資料庫執行以正常停止 mongod——也可在 rm/斷電後用來協助恢復。

use admin;db.shutdownServer({force:true}? 不行;乾淨關機會等待 oplog 複寫)

use admin; db.shutdownServer()

速查頁版本 1.0.0

適用於 MongoDB 6.0+ / mongosh 1.6+