在MongoDB中,可以使用聚合管道(aggregation pipeline)对集合中的数据进行数据统计。聚合管道是一系列的阶段(stages),每个阶段都会对数据进行某种操作。以下是一些常用的聚合管道阶段,用于数据统计:
$match
:过滤数据,只保留满足指定条件的文档。$group
:根据指定的键值对文档进行分组,并对每个分组执行聚合操作,如求和、计数、平均值等。$sort
:对数据进行排序。$project
:选择或排除文档中的字段,以及对字段进行计算和转换。$limit
:限制输出文档的数量。$skip
:跳过指定数量的文档。$unwind
:将数组字段拆分为多个文档。$lookup
:在另一个集合中查找文档,并将它们与当前文档合并。
以下是一个使用聚合管道进行数据统计的示例:
假设我们有一个名为orders
的集合,其中包含以下文档:
[ { "_id": 1, "customer_id": 1, "amount": 100 }, { "_id": 2, "customer_id": 1, "amount": 200 }, { "_id": 3, "customer_id": 2, "amount": 300 }, { "_id": 4, "customer_id": 2, "amount": 400 }, { "_id": 5, "customer_id": 3, "amount": 500 } ]
我们想要统计每个客户的订单总金额和订单数量。可以使用以下聚合查询:
db.orders.aggregate([ { $group: { _id: "$customer_id", totalAmount: { $sum: "$amount" }, orderCount: { $sum: 1 } } }, { $sort: { totalAmount: -1 } } ])
这个查询的输出将是:
[ { "_id": 3, "totalAmount": 500, "orderCount": 1 }, { "_id": 2, "totalAmount": 700, "orderCount": 2 }, { "_id": 1, "totalAmount": 300, "orderCount": 2 } ]
这个示例中,我们首先使用$group
阶段按customer_id
对文档进行分组,并计算每个分组的totalAmount
(订单总金额)和orderCount
(订单数量)。然后,我们使用$sort
阶段按totalAmount
对结果进行降序排序。