$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 ] ] }

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q数组长度不一致会怎样?
A默认按最短截断;设 useLongestLength 为 true 并按需提供 defaults。
Qdefaults 起什么作用?
A为长度不足的数组补缺,个数必须与 inputs 一致。
Q$zip 和 $concatArrays 有什么区别?
A$zip 按位置纵向组合成元组数组,$concatArrays 横向首尾相连成一个长数组。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏