如何将MongoDB两个集合的数据合并为按名称排序的统一文档集合
实现方案
你需要的效果可以通过MongoDB的$unionWith聚合算子实现,该算子专门用于合并多个集合的查询结果,不需要做关联操作,完全匹配你的需求。完整聚合查询语句如下:
db.Analytics_Region.aggregate([ // 处理公共区域集合的字段,只保留需要的字段 { $project: { _id: 1, name: 1, type: 1, province: 1 } }, // 合并自定义区域集合的处理结果 { $unionWith: { coll: "Analytics_Region_Custom", pipeline: [ // 给自定义区域补充要求的固定字段 { $addFields: { type: "custom", province: null } }, // 统一字段结构,过滤多余字段 { $project: { _id: 1, name: 1, type: 1, province: 1 } } ] } }, // 按name字段字母升序排序 { $sort: { name: 1 } } ])
步骤说明
- 先对
Analytics_Region集合做字段投影,过滤掉你不需要的CSD、geometry等冗余字段,保留目标结构的四个字段 - 通过
$unionWith关联Analytics_Region_Custom集合,对该集合的文档先新增要求的type: "custom"和province: null字段,再做同样的字段投影保证两个集合的输出结构一致 - 合并完成后统一对所有文档按
name字段做升序排序,得到你需要的最终结果
内容的提问来源于stack exchange,提问作者Jonathan D'Silva
相关产品推荐
相关产品推荐

