📜  MongoDB aggregation-pipeline运算符(1)

📅  最后修改于: 2023-12-03 15:17:41.527000             🧑  作者: Mango

MongoDB Aggregation Pipeline 运算符

MongoDB Aggregation Pipeline 运算符是 MongoDB 查询语言中用于数据聚合操作的一类运算符。它们允许对查询结果进行多个相关操作从而生成丰富的数据分析及可视化报告。

基本语法
db.collection.aggregate([
   { $match: { <query> } },
   { $group: { _id: <expression>, <field1>: {<accumulator1>: <expression1>}, ... } },
   { $sort: { <field1>: <sort order>, ... } },
   { $project: { <projected fields> } },
   { $limit: <positive integer> },
   { $skip: <positive integer> },
   { $unwind: <path> },
   ...
]);

上述语法用于指定一个聚合管道,可以包含一个或多个运算符。每个运算符都将对前一个运算符的输出进行处理。

常用运算符

以下是 MongoDB 中常用的几个聚合管道运算符:

$match

用于指定一个查询条件,只有满足该条件的文档才会被加入下一级管道进行处理。

{ $match: { status: "A" } }
$group

用于对文档进行分组,通常需要配合累加器(accumulator)进行具体计算。

{ $group: { _id: "$account_number", averageBalance: { $avg: "$balance" } } }
$sort

用于指定排序关键字及排序顺序。

{ $sort: { balance: -1 } }
$project

用于限制输出的字段或新增计算字段。

{ $project: { name: 1, surname: 1, fullname: { $concat: ["$name", " ", "$surname"] } } }
$limit

用于限制输出文档数量。

{ $limit: 10 }
$skip

用于跳过指定数量的文档并输出余下的文档。

{ $skip: 5 }
$unwind

用于将数组类型的文档字段拆分成多个文档,以便后续运算器对其进行处理。

{ $unwind: "$tags" }
$lookup

用于在同一数据集或其它数据集之间进行联接(join)操作。

{
   $lookup:
     {
       from: "inventory",
       localField: "code",
       foreignField: "code",
       as: "inventory_docs"
     }
}
总结

MongoDB Aggregation Pipeline 运算符是 MongoDB 中用于完成数据聚合操作的重要工具。熟练掌握其中的各种运算符,能够轻松完成各种数据分析及可视化报告。在实际使用中,我们还需要结合具体的数据类型、业务需求及性能要求对各种运算符进行灵活的组合使用。