在MongoDB中进行分组统计查询主要有以下两种方式:
- 使用聚合框架中的$group操作符进行分组统计。
- 按字段age分组,统计count:
db.users.aggregate([
{
$group: {
_id: "$age",
count: {$sum: 1}
}
}
])
- 多字段分组,计算平均值:
db.products.aggregate([
{
$group: {
_id: {category: "$category", subCategory: "$subCategory"},
avgPrice: {$avg: "$price"}
}
}
])
- 除数分组,过滤条件,排序等:
db.users.aggregate([
{
$match: {age: {$gt: 30}}
},
{
$group: {
_id: "$age",
count: {$sum: 1}
}
},
{
$sort: {count: -1}
}
])
- 使用MapReduce进行更复杂的分组统计计算。
- 示例:按age分组,计算平均age:
var map = function() {
emit(this.age, this.age);
};
var reduce = function(key, values) {
return Array.sum(values) / values.length;
};
db.users.mapReduce(map, reduce, {out: "results"});
- MapReduce可以利用分片集群进行并行计算,对海量数据进行分组统计。
理解MongoDB的分组统计查询方式,可以让我们实现各种业务统计与分析功能。