すべてのチートシート

MongoDB (mongosh) チートシート

mongosh を素早く参照:接続、CRUD、クエリ演算子、集約パイプライン、インデックス、レプリカ セット、ユーザ、ダンプ / リストア — よく使うシェル パターンと実用例をまとめました。

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

DB を一覧 / 切替 / 現在の DB のコレクションを一覧。

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

サーバ情報:接続、opcounters、レプリケーション状態;db 統計:サイズとコレクション。

.pretty() で整形; .verbose(); .json; --eval 結果

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

CRUD: Read

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

ドキュメントを 1 件読み取り、またはフィルタ一致の件数を取得。

findOne はフィルタ有 / 無;estimatedDocumentCount は O(1)

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

CRUD: Create

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

ドキュメントを 1 件 / 複数挿入;ordered:false で一部失敗時も有効な分すべて書込。

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

CRUD: Update

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

ドキュメントを 1 件更新。$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: Replace

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

_id(置換対象に指定不可)を除き、ドキュメント全体を置換します。

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

CRUD: Delete

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

インデックス一覧;1 件 / 全件の削除(本番で気軽に実行しないこと)。

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

勝者プランと実際の実行統計を確認。COLLSCAN、IXSCAN、FETCH、ソート ステージを探す。

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 コマンドを直接実行。シェル ヘルパにない操作用の抜け道。

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

ロール管理(admin DB で実行)。

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() on the next member

シャード クラスタ

sh.status() / sh.enableSharding

クラスタ トポロジの確認 / DB に対するシャーディング有効化。

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

ライブ監視:直前 1 秒間のコレクション別 read / write 時間、統計情報。

interval(秒); --host

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

mongod を綺麗に停止するため admin DB で実行 — rm / 電源断からの復旧にも便利。

use admin; db.shutdownServer({force:true}? は不可); クリーンは oplog レプリケーションを待機

use admin; db.shutdownServer()

チートシート バージョン 1.0.0

MongoDB 6.0+ / mongosh 1.6+ に対応