MongoDB 3.2聚合查询:合并文档并保留所有ID至数组
MongoDB 3.2 聚合合并文档实现方案
针对你的需求,在MongoDB 3.2环境中可以通过以下聚合管道实现:
实现步骤
- 提取specId数组:先通过
$project阶段,将每个文档的specLookup数组中的specId字段提取为独立的specIds数组,简化后续合并操作。 - 分组合并所有数据:使用
$group阶段,以_id: null将所有文档归入同一组,分别对id、childItems、specIds进行数组合并:ids:用$push直接收集每个文档的idchildItems和specIds:借助$push的$each修饰符,将每个文档的数组元素逐一合并到结果数组中
- 移除冗余字段:最后用
$project阶段去掉自动生成的_id字段,得到目标结构。
完整聚合查询代码
db.yourCollection.aggregate([ // 提取specId为独立数组 { $project: { id: 1, childItems: 1, specIds: "$specLookup.specId" } }, // 分组合并所有文档 { $group: { _id: null, ids: { $push: "$id" }, childItems: { $push: { $each: "$childItems" } }, specIds: { $push: { $each: "$specIds" } } } }, // 移除_id字段 { $project: { _id: 0, ids: 1, childItems: 1, specIds: 1 } } ])
结果验证
执行上述查询后,将得到你需要的合并文档:
{ "ids": ["record-1", "record-2"], "childItems": ["child-1", "child-2", "child-3"], "specIds": ["spec-1", "spec-2", "spec-3"] }
内容的提问来源于stack exchange,提问作者TomDavies
相关产品推荐
相关产品推荐

