好的,以下是一本markdown格式的MongoDB聚合学习笔记,其中包括了一些实例。

MongoDB 聚合学习笔记

什么是聚合框架?

MongoDB的聚合框架是一种数据处理查询语言,通过将数据记录传递到一个或多个聚合管道阶段来对文档进行处理。这些阶段可以用于过滤、转换、排序、分组、计算等等操作,以生成最终结果。

基本的聚合管道阶段

$match

$match阶段用于筛选文档,只有符合指定条件的文档才会被传递到下一个阶段。

Copy Code
db.collection.aggregate([ { $match: { status: "A" } } ])

上述代码表示只选择状态为“A”的文档。

$project

$project阶段用于选择和重命名字段,以及创建新的计算字段。

Copy Code
db.collection.aggregate([ { $project: { _id: 0, name: 1, discount: { $multiply: [ "$price", 0.2 ] } } } ])

上述代码表示选择name字段并排除_id字段,同时创建一个名为discount的计算字段,该字段是price字段的20%。

$group

$group阶段用于根据指定的字段对文档进行分组,并计算每个组中文档的汇总值。

Copy Code
db.sales.aggregate([ { $group: { _id: "$product", total_sales: { $sum: "$amount" } } } ])

上述代码表示根据product字段对文档进行分组,并计算每个产品的总销售额。

$sort

$sort阶段用于对文档进行排序。

Copy Code
db.sales.aggregate([ { $sort: { amount: -1 } } ])

上述代码表示按amount字段降序排序文档。

进阶的聚合管道阶段

$lookup

$lookup阶段用于在同一数据库中的不同集合之间执行连接操作。

Copy Code
db.orders.aggregate([ { $lookup: { from: "products", localField: "product_id", foreignField: "_id", as: "product" } } ])

上述代码表示从orders集合中返回文档,并将其product_id字段与products集合中的_id字段进行连接。

$unwind

$unwind阶段用于展开数组字段。

Copy Code
db.inventory.aggregate([ { $unwind: "$sizes" } ])

上述代码表示展开sizes数组字段,生成多个与原文档相同但sizes字段值为不同的文档。

$out

$out阶段用于将聚合操作的结果写入新的集合。

Copy Code
db.orders.aggregate([ { $match: { status: "A" } }, { $group: { _id: "$product", total_sales: { $sum: "$amount" } } }, { $out: "product_report" } ])

上述代码表示将status为“A”的订单根据产品分组并计算总销售额,最终结果写入product_report集合。

以上是MongoDB聚合的基本知识点和实例。