$map (配列の各要素を変換)
最終更新:2026-10-09
$map (配列の各要素を変換)
$map は配列を反復し、各要素を in 式に通して、同じ長さの新しい配列に結果を集めます。集計式で最も使われる関数型演算子です。代表的な用途は、注文の全アイテムに税を適用する、文字列のリストを大文字化する、オブジェクトの配列からフィールドを抽出するなどです。as で指定した変数は in 内で $$variable として参照し、as を省略した場合は $$this を使います。$map は長さを保って要素の値を変えます。要素の除去が必要なら $filter、畳み込みが必要なら $reduce と組み合わせます。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $map: { input: <array>, as: <variable>, in: <expression> } }
⚙️ パラメータ
| input | 反復する配列。 |
|---|---|
| as | 現在の要素の変数名。in 内で $$variable として参照します。任意で、既定は $$this。 |
| in | 各要素に対して評価される式。その結果が新しい配列を形成します。 |
戻り値:各要素の in 結果からなる新しい配列。入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $map: 各アイテムの数量を 2 倍にする
db.orders.aggregate([
{ $project: {
doubled: { $map: { input: '$items', as: 'it', in: { $multiply: ['$$it.qty', 2] } } }
} }
])
出力:
{ '_id': 1, 'doubled': [ 4, 6 ] }
{ '_id': 2, 'doubled': [ 2 ] }
📌 注意事項
- in は要素ごとの最終式。as 変数は $$ プレフィックスで参照する
- $map は長さを保つ: 値は変えても件数は変えない。除去は $filter
- in 内に $map/$filter/$reduce を入れ子にして関数型パイプラインを組める
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$map と $filter の違いは?
A$map は長さを変えずに全要素を変換します。$filter は内容を変えずに要素を除去します。うまく入れ子にできます。
Q配列の長さは変えられますか?
Aいいえ — 結果の長さは入力と同じです。長さを変えるには $filter や $reduce を使います。
Qas 変数は省略できますか?
Aはい — 省略した場合、in 内では現在の要素を $$this で参照します。