$slice (配列の部分取得)
最終更新:2026-10-09
$slice (配列の部分取得)
$slice は配列の一部を取り出します。2 引数形式は先頭から n 個(n が負なら末尾から n 個)を、3 引数形式は n 個スキップしてから指定件数を取ります。コメントのページング、最新注文の取得、返すタグ数の上限などに使われます。元の配列を変更せず新しい配列を返し、null の引数は null になります。文字列用の $substr に相当する配列版です。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $slice: [ <array>, <count> ] } or { $slice: [ <array>, <skip>, <count> ] }
⚙️ パラメータ
| 配列 | スライスする配列。 |
|---|---|
| 数 | 取得する要素数。2引数形式で負の場合は、末尾から n 個を取得します。 |
| スキップ | 任意。3引数形式で最初にスキップする要素数。負の場合は末尾から逆に数えます。 |
戻り値:抽出された部分配列。引数が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $slice: 先頭の 3 タグを取得
db.posts.aggregate([
{ $project: {
topTags: { $slice: ['$tags', 3] }
} }
])
出力:
{ '_id': 1, 'topTags': [ 'mongo', 'db', 'nosql' ] }
📌 注意事項
- 2 引数形式 [配列, n]: 正の n は先頭 n 個、負の n は末尾 n 個
- 3 引数形式 [配列, skip, count]: 負の skip は末尾からのカウントになる
- 長さを超えたスライスはエラーにならず、存在する要素だけを返す
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$slice で末尾の要素を取るには?
A負の件数を使います。末尾 3 個なら { $slice: ['$arr', -3] }。
Qページングできますか?
Aはい — { $slice: ['$arr', 10, 10] } で 10 個スキップして 10 個取れます。
Q長さを超えるとエラーになりますか?
Aいいえ — null で埋めずに、存在する要素だけを返します。