MongoDB如何基于嵌套文档内的package_id字段实现分组聚合
MongoDB 按嵌套字段分组聚合实现
你的collection1_document集合中package是直接嵌套在文档内的对象字段,不需要执行跨集合关联,直接取嵌套字段路径作为分组键即可完成聚合。
基础分组语句(统计每个package_id对应的文档数量)
直接在聚合的$group阶段指定_id为$package.package_id,就能按嵌套的package_id值完成分组:
db.collection1_document.aggregate([ { $group: { // 分组键:指向嵌套的package.package_id字段 _id: "$package.package_id", // 统计当前分组下的文档总条数 total_count: { $sum: 1 }, // 可选:收集当前分组下所有文档的_id related_doc_ids: { $push: "$_id" }, // 可选:取当前分组下第一个文档的package名称(同package_id对应name固定时可用) package_name: { $first: "$package.name" } } } ])
常见扩展用法
- 分组前过滤无效数据:在
$group前新增$match阶段,排除package字段不存在、package_id为空的无效文档
db.collection1_document.aggregate([ { $match: { "package.package_id": { $exists: true, $ne: "" } } }, { $group: { _id: "$package.package_id", total_count: { $sum: 1 } } } ])
- 关联独立package集合补充属性:如果需要取
package集合中存储的更多包维度属性,可在分组后新增$lookup阶段做关联,仅按当前文档内嵌套的package_id分组的场景不需要该步骤。
内容的提问来源于stack exchange,提问作者Mert Öztürk
相关产品推荐
相关产品推荐

