如何在mongodb中聚合子文档?

时间:2015-11-24 08:01:10

标签: c# mongodb

我有以下系列:

{
    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查询(或者使用mongodb c#driver更好)?

2 个答案:

答案 0 :(得分:1)

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. 结果集转换为数组

答案 1 :(得分:0)

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