$zip(按位置合并多个数组)
最后更新:2026-10-09
$zip(按位置合并多个数组)
$zip 把多个数组按位置合并成一组组数组,每组包含各数组同一位置的元素,相当于把数组纵向对齐。默认按最短数组截断;设置 useLongestLength 为 true 时按最长数组对齐,并用 defaults 为缺失位置补值。典型场景包括把姓名数组和分数数组配对、合并两个时间序列。defaults 的长度必须与 inputs 数组个数一致。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $zip: { inputs: [ <数组1>, <数组2>, ... ], useLongestLength: <布尔>, defaults: [ <默认值>, ... ] } }
⚙️ 参数
| inputs | 要合并的数组列表。 |
|---|---|
| useLongestLength | 可选,布尔值;为 true 时按最长数组对齐。 |
| defaults | 可选,为较短数组补缺的默认值数组,长度须与 inputs 一致。 |
返回值:按位置组合的数组;任一 input 为 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为长度不足的数组补缺,个数必须与 inputs 一致。
Q$zip 和 $concatArrays 有什么区别?
A$zip 按位置纵向组合成元组数组,$concatArrays 横向首尾相连成一个长数组。