📜  MongoDB聚合命令(1)

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

MongoDB聚合命令

概述

MongoDB聚合命令是用于将多个文档数据处理成一个结果的工具。聚合操作可以帮助开发人员根据需求筛选、统计、计算文档,得到需要的结果。

聚合操作通过使用$group,$match,$sort等命令构建pipeline,将数据按照一定的规则处理,最终返回处理后的数据结果。

常用聚合命令
1. $match

$match命令用于过滤文档,只返回符合条件的文档。它的语法如下:

$match: {
    <query-expression>
}

示例代码:

db.customers.aggregate([
    { $match : { country : "China" } }
])
2. $group

$group命令用于对文档进行分组,将具有相同值的文档分为一组,然后对每组进行计算。它的语法如下:

$group: {
    _id: <expression>,
    <field1>: { <accumulator1> : <expression1> },
    ...
}

其中,_id表示分组依据的字段,表示需要计算的字段,表示计算方法,表示参与计算的表达式。

示例代码:

db.sales.aggregate([
    { $group : { _id : "$item", total : { $sum : "$price" } } }
])
3. $sort

$sort命令用于排序文档。它的语法如下:

$sort: {
    <field1>: <sort order>,
    ...
}

其中,表示需要排序的字段,可以是1表示升序,-1表示降序。

示例代码:

db.sales.aggregate([
    { $sort : { total : -1 } }
])
4. $limit和$skip

$limit和$skip命令用于控制返回文档的数量和偏移量。它们的语法如下:

$limit: <number>
$skip: <number>

其中,表示需要返回的文档数量或者跳过的文档数量。

示例代码:

db.sales.aggregate([
    { $sort : { total : -1 } },
    { $limit : 10 },
    { $skip : 5 }
])
使用示例
场景说明

假设我们有一份用户数据,需要对数据进行聚合操作,得到各个国家的用户数量、平均年龄和平均收入。

数据源
{
   "_id": 1,
   "name": "Tom",
   "gender": "male",
   "age": 30,
   "country": "China",
   "salary": 2000
}
{
   "_id": 2,
   "name": "Lucy",
   "gender": "female",
   "age": 25,
   "country": "USA",
   "salary": 2500
}
{
   "_id": 3,
   "name": "Jerry",
   "gender": "male",
   "age": 35,
   "country": "USA",
   "salary": 4000
}
{
   "_id": 4,
   "name": "Lily",
   "gender": "female",
   "age": 28,
   "country": "China",
   "salary": 3000
}
操作过程

步骤1:$group

按照国家进行分组,统计各个国家的用户数量、平均年龄和平均收入。

db.users.aggregate([
    { $group : { _id : "$country",
                 num_users: { $sum: 1 },
                 avg_age: { $avg: "$age" },
                 avg_salary: { $avg: "$salary" }
              }
    }
])

步骤2:$sort

按照用户数量排序。

db.users.aggregate([
    { $group : { _id : "$country",
                 num_users: { $sum: 1 },
                 avg_age: { $avg: "$age" },
                 avg_salary: { $avg: "$salary" }
                }
    },
    { $sort : { num_users : -1 } }
])

步骤3:$limit和$skip

只返回前3条结果。

db.users.aggregate([
    { $group : { _id : "$country",
                 num_users: { $sum: 1 },
                 avg_age: { $avg: "$age" },
                 avg_salary: { $avg: "$salary" }
                }
    },
    { $sort : { num_users : -1 } },
    { $limit : 3 },
    { $skip : 0 }
])
总结

本文介绍了MongoDB聚合命令的基本使用方法,并提供了一个简单的示例,可以帮助开发人员更好地了解聚合操作的使用。除此之外,还有很多其他聚合命令和使用场景,需要开发人员根据实际需求进行学习和实践。