$slice (配列の部分抽出)
最終更新:2026-10-09
$slice (配列の部分抽出)
射影での $slice は、ドキュメントを変更せずに配列フィールドの一部を返します。`{ tags: { $slice: 2 } }` は先頭 2 要素を返し、`{ tags: { $slice: [1, 3] } }` は 1 要素スキップして 3 要素を返します。最初の数件のコメントや添付ファイルだけを表示する一覧ページでよく使われます。更新修飾子の $slice と同じ名前ですが、役割が異なります。
| カテゴリ | 投影 |
|---|---|
| MongoDB バージョン | 2.4+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <array field>: { $slice: <count> } } or { <array field>: { $slice: [ <skip>, <count> ] } }
⚙️ パラメータ
| 配列フィールド | スライスする配列フィールド。 |
|---|---|
| 数または配列 | 先頭 N 件の件数、またはスキップ後に取得する [skip, count]。 |
戻り値:指定した配列サブセットで射影されたドキュメント
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $slice: 最初の 3 つのタグだけを返す
db.articles.find(
{ _id: 1 },
{ title: 1, tags: { $slice: 3 } }
)
// 1 つスキップして 2 つ取得
db.articles.find(
{ _id: 1 },
{ comments: { $slice: [1, 2] } }
)
出力:
// タイトルと最初の 3 つのタグを返す。2 つ目のクエリはコメントを 1 つスキップして 2 つ取得する
📌 注意事項
- 射影にのみ影響し、元のドキュメントは変更しない
- 引数 1 つなら先頭 N 件、引数 2 つなら [スキップ数, 取得数]
- 更新修飾子の $slice と同じ名前だが役割が異なる
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q射影の $slice と更新の $slice は同じものですか?
A違います。射影の $slice は結果の形を整え、更新の $slice は $push 後の配列長を制限します。
Q配列の末尾の要素を取得するには?
A負の値を使います。{ tags: { $slice: -3 } } で最後の 3 要素を取得できます。
Q$slice は他の射影と組み合わせられますか?
Aはい。競合しない限り組み合わせ可能です。