如何在MongoDB中进行分组统计查询?

在MongoDB中进行分组统计查询主要有以下两种方式:

  1. 使用聚合框架中的$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}
  }
])
  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的分组统计查询方式,可以让我们实现各种业务统计与分析功能。