$slice (配列長の上限設定・更新)

最終更新:2026-10-09

$slice (配列長の上限設定・更新)

更新修飾子としての $slice は、$push 後に配列の長さを上限で切り詰めます。`{ $push: { log: { $each: [msg], $slice: -10 } } }` で最新 10 件だけを保持します。負の値は末尾から、正の値は先頭から切り詰めます。$each と組み合わせるとローリングログを実現できます — 射影の $slice と同じ名前ですが役割が異なります。

カテゴリ更新修飾子
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $push: { <array field>: { $each: [ <value> ], $slice: <count> } } }

⚙️ パラメータ

配列フィールド上限を設ける配列フィールド。
数保持する件数。負の値は末尾から保持します。

戻り値:更新結果

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $slice: 最新のログ 10 件を保持
// -10 は末尾から 10 件を保持
db.devices.updateOne(
  { _id: 1 },
  { $push: { log: { $each: ['boot ok'], $slice: -10 } } }
)

出力:

// 追加後に log は最新 10 件に切り詰められる

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q更新の $slice と射影の $slice は同じものですか?
Aいいえ。更新の $slice は配列を切り詰め、射影の $slice は結果の形を整えるだけです。
Q$slice: -10 はどういう意味ですか?
A末尾から 10 件を保持し、ローリングログを実現します。
Q$slice は $each と必ず組み合わせますか?
Aはい。MongoDB 5.0 以降、$slice は $each と一緒にしか使えません。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%