$unwind(拆分数组)

最后更新:2026-10-09

$unwind(拆分数组)

$unwind 将文档中的数组字段拆开,为每个数组元素输出一条文档,其余字段原样复制。适合把数组拍平后再做分组、统计或关联。空数组、缺失字段或 null 字段默认被丢弃,可用 preserveNullAndEmptyArrays 保留;includeArrayIndex 可输出元素下标。注意拆分会成倍增加文档数量,需要估算后续阶段的开销。

分类核心阶段
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

{ $unwind: { path: "$数组字段", preserveNullAndEmptyArrays: <布尔>, includeArrayIndex: "<索引字段>" } }

⚙️ 参数

path要拆分的数组字段路径,必须以 $ 开头。
preserveNullAndEmptyArrays为 true 时保留空数组、缺失或 null 字段的文档。
includeArrayIndex把元素在原数组中的下标输出到指定字段。

返回值:拆平后的文档流(每个数组元素一条文档)

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $unwind:把 tags 数组拆成独立文档
db.inventory.aggregate([
  { $unwind: { path: '$tags', includeArrayIndex: 'idx' } }
])

运行结果:

{ "_id": 1, "item": "Pen", "tags": "A", "idx": 0 }
{ "_id": 1, "item": "Pen", "tags": "B", "idx": 1 }

📌 注意事项

📚 相关教程

❓ 常见问题

Q$unwind 拆出来的文档 _id 一样吗?
A一样,_id 与其余字段被原样复制,只有数组字段变成单个元素。
Q$unwind 遇到空数组会怎样?
A该文档默认被丢弃;设置 preserveNullAndEmptyArrays 为 true 可保留原文档。
Q多个数组字段能同时拆吗?
A一个 $unwind 只拆一个数组;要拆多个可连续用多个 $unwind 阶段,结果是笛卡尔积。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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