$arrayElemAt (インデックスで要素を取得)
最終更新:2026-10-09
$arrayElemAt (インデックスで要素を取得)
$arrayElemAt は、配列内の指定したインデックス位置にある要素を返します。集計式で位置に基づいて配列へアクセスするための基本演算子で、注文の先頭アイテム、配列の末尾要素、$project 内での特定位置の取得などによく使われます。インデックスは 0 始まりで、負のインデックスは末尾からのカウントになり、範囲外のアクセスはエラーではなく null を返します。$first/$last とは違い、$arrayElemAt は任意の位置にアクセスできるため、より柔軟です。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $arrayElemAt: [ <array>, <index> ] }
⚙️ パラメータ
| 配列 | 配列、または配列に解決される式。 |
|---|---|
| インデックス | 整数インデックス。負の値は末尾から数え、-1 は最後の要素です。 |
戻り値:指定されたインデックスの要素。範囲外、または配列が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $arrayElemAt: 注文の先頭アイテムを取得
db.orders.aggregate([
{ $project: {
firstItem: { $arrayElemAt: ['$items', 0] }
} }
])
出力:
{ '_id': 1, 'firstItem': { 'sku': 'A01', 'qty': 2 } }
{ '_id': 2, 'firstItem': { 'sku': 'B02', 'qty': 1 } }
📌 注意事項
- インデックスは 0 始まり。末尾要素は $size を計算せずに -1 で取れる
- 範囲外はエラーではなく null — $ifNull でフォールバックを用意する
- $first/$last が端だけを取るのに対し、$arrayElemAt は任意の位置にアクセスできる
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$arrayElemAt で末尾の要素を取得するには?
Aインデックスに -1 を指定します。例: { $arrayElemAt: ['$arr', -1] } — 長さを事前に計算する必要はありません。
Q範囲外のインデックスはエラーになりますか?
Aいいえ — null を返します。デフォルト値を指定したい場合は $ifNull で包みます。
Q$arrayElemAt と $first の違いは?
A$first は常に先頭要素を取ります。$arrayElemAt は負のインデックスも含む任意の位置を取れるため、より柔軟です。