MongoDB是一种非关系型数据库,它以文档形式存储数据。MongoDB能够高效处理大量数据,是最受欢迎的NoSQL数据库之一,因为它提供了丰富的查询语言和灵活快速的数据访问方式。本文将通过多个示例展示如何使用PyMongo在MongoDB数据库中创建聚合管道,并介绍match、bucket、facet等操作符的使用。这是MongoDB系列文章的第三篇,如果对MongoDB是初学者,建议先阅读以下两篇文章:
PyMongo是一个Python库,它使能够连接MongoDB。这是与MongoDB和Python一起工作最推荐的方式。还选择Python与MongoDB交互,因为它是数据科学领域最常用且功能强大的语言之一。PyMongo允许使用类似字典的语法检索数据。如果是Python初学者,推荐参加这个免费课程:。现在让看看如何使用PyMongo在MongoDB数据库中创建聚合管道。
安装PyMongo非常简单直接。这里假设已经安装了Python 3和MongoDB。以下命令将帮助安装PyMongo:
pip3 install pymongo
在聚合操作中,数据被处理并返回计算结果。聚合管道提供了一个框架来聚合数据,建立在数据处理管道的概念之上。以下是其语法:
your_collection.aggregate([ { stage1 }, { stage2 }, ... ])
聚合管道由多个阶段组成。管道中的每个阶段都会转换通过管道的文档。让看看这些阶段:
match阶段通常用于过滤文档,并且通常出现在管道的开始。它有以下语法:
{ $match: { <query> } }
应该尽可能早地在管道中放置match阶段,因为它会过滤文档,match操作符也将能够利用索引。
下一个聚合操作符是group操作符。如果使用过pandas,可能见过通常使用groupby来根据特定字段找到统计数据。例如,按部门计算员工的平均薪水,每个商店销售的独特商品数量等。
{
$group: {
_id: <expression>, // 分组表达式
<field1>: { <accumulator1> : <expression1> },
...
}
}
如果将_id的值设置为“None”或任何常数值,如0,它将计算所有字段的聚合结果,而不是根据任何特定字段对数据进行分组。
bucket操作符将文档分成多个组,然后执行操作。以下是其语法:
{
$bucket: {
groupBy: <expression>,
boundaries: [ <lowerbound1>, <lowerbound2>, ... ],
default: name_of_the_label,
output: {
<output1>: { <$accumulator expression> },
...
<outputN>: { <$accumulator expression> }
}
}
}
{
$facet: {
<output_field_name_1>: [
<stage1>,
<stage2>,
...
],
<output_field_name_2>: [
<stage1>,
<stage2>,
...
],
...
}
}