如何在mongodb中聚合子文档

本文关键字:文档 mongodb | 更新日期: 2023-09-27 18:24:00

我有以下集合:

{
    name: "c1",
    jobs: [{
        category: "a"
    }, {
        category: "a"
    },{
        category: "b"
    }]
}
{
    name: "c2",
    jobs: [{
        category: "b"
    }, {
        category: "c"
    }]
}

我想得到以下结果:

[{
    category: "a",
    total: 2
}, {
    category: "b",
    total: 2
}, {
    category: "c",
    total: 1
}]

如何使用mongodb查询(或者更好地使用mongodbc#驱动程序)做到这一点?

如何在mongodb中聚合子文档

db.test.aggregate( 
    { $unwind: "$jobs" }, 
    { $group: 
        { _id: '$jobs.category', total : { '$sum' : 1 } } 
    },
    { $project: { category : '$_id', _id:0, total:1 } }     
).toArray()

这产生了与您的问题完全相同的结果。

  1. 展开类别数组将生成五个文档
  2. 对于每个类别,计算金额
  3. $group步骤中的_id被重命名为category
  4. 转换为数组的结果集
db.getCollection('test').aggregate( 
    { $unwind: "$jobs" }, 
    { $group: 
        { _id: '$jobs.category', total : { '$sum' : 1 } } 
    } 
)