$zip (複数配列を位置ごとに統合)
最終更新:2026-10-09
$zip (複数配列を位置ごとに統合)
$zip は複数の配列を位置ごとにまとめてグループにします。各グループは全入力から同じインデックスの要素を持ち、配列の縦方向の整列です。既定では最も短い配列に切り詰められます。useLongestLength を true にすると最長に合わせ、不足するスロットを defaults で埋めます。代表的な用途は、名前配列とスコア配列のペアリングや、2 つの時系列の結合です。defaults は inputs と同じ要素数でなければなりません。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $zip: { inputs: [ <array1>, <array2>, ... ], useLongestLength: <boolean>, defaults: [ <default>, ... ] } }
⚙️ パラメータ
| inputs | マージする配列のリスト。 |
|---|---|
| useLongestLength | 任意のブール値。true の場合は最長の配列に合わせます。 |
| defaults | 短い配列を埋める任意の既定値。入力数と一致する必要があります。 |
戻り値:位置ごとにグループ化した配列。いずれかの入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $zip: 名前とスコアをペアにする
db.students.aggregate([
{ $project: {
pairs: { $zip: { inputs: ['$names', '$scores'] } }
} }
])
出力:
{ '_id': 1, 'pairs': [ [ 'alice', 90 ], [ 'bob', 85 ] ] }
📌 注意事項
- 既定では最も短い配列に切り詰められ、超過要素は捨てられる
- useLongestLength を true にする場合は defaults を指定する。なければ不足スロットは null
- defaults は inputs とちょうど同じ要素数でなければならない
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q配列の長さが違う場合は?
A既定では最短に切り詰めます。useLongestLength を true にし、defaults を指定してください。
Qdefaults の役割は?
A短い配列の不足スロットを埋める値で、入力と同じ個数を指定する必要があります。
Q$concatArrays との違いは?
A$zip は配列を縦に整列してタプルにします。$concatArrays は横に連結して 1 つの長い配列にします。