《MongoDB入门教程》第23篇 聚合统计之$sum表达式
Posted 不剪发的Tony老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MongoDB入门教程》第23篇 聚合统计之$sum表达式相关的知识,希望对你有一定的参考价值。
本文将会介绍如何利用 $sum 表达式计算一组数值的总和。
$sum 表达式
MongoDB 支持 $sum 表达式,用于返回一组数值的总和。该表达式的语法如下:
$sum: <expression>
如果汇总的字段包含非数值内容, $sum 表达式会忽略相应的内容。如果所有文档中都不存在指定的汇总字段,$sum 表达式的结果为 0。
$sum 示例
首先创建一个 sales 集合:
db.sales.insertMany([
"_id" : 1, "item" : "Americanos", "price" : 5, "size": "Short", "quantity" : 22, "date" : ISODate("2022-01-15T08:00:00Z") ,
"_id" : 2, "item" : "Cappuccino", "price" : 6, "size": "Short","quantity" : 12, "date" : ISODate("2022-01-16T09:00:00Z") ,
"_id" : 3, "item" : "Lattes", "price" : 15, "size": "Grande","quantity" : 25, "date" : ISODate("2022-01-16T09:05:00Z") ,
"_id" : 4, "item" : "Mochas", "price" : 25,"size": "Tall", "quantity" : 11, "date" : ISODate("2022-02-17T08:00:00Z") ,
"_id" : 5, "item" : "Americanos", "price" : 10, "size": "Grande","quantity" : 12, "date" : ISODate("2022-02-18T21:06:00Z") ,
"_id" : 6, "item" : "Cappuccino", "price" : 7, "size": "Tall","quantity" : 20, "date" : ISODate("2022-02-20T10:07:00Z") ,
"_id" : 7, "item" : "Lattes", "price" : 25,"size": "Tall", "quantity" : 30, "date" : ISODate("2022-02-21T10:08:00Z") ,
"_id" : 8, "item" : "Americanos", "price" : 10, "size": "Grande","quantity" : 21, "date" : ISODate("2022-02-22T14:09:00Z") ,
"_id" : 9, "item" : "Cappuccino", "price" : 10, "size": "Grande","quantity" : 17, "date" : ISODate("2022-02-23T14:09:00Z") ,
"_id" : 10, "item" : "Americanos", "price" : 8, "size": "Tall","quantity" : 15, "date" : ISODate("2022-02-25T14:09:00Z")
]);
示例一:简单汇总
以下示例计算了全部咖啡的总销量:
db.sales.aggregate([
$group:
_id: null,
totalQty: $sum: '$quantity' ,
,
,
]);
输出结果如下:
[ _id: null, totalQty: 185 ]
以下示例使用 $project 操作删除了返回结果中的 _id:
db.sales.aggregate([
$group:
_id: null,
totalQty: $sum: '$quantity' ,
,
,
$project: _id: 0 ,
]);
[ totalQty: 185 ]
示例二:分组汇总
以下示例使用 $sum 表达式计算了不同产品的销量汇总:
db.sales.aggregate([
$group:
_id: '$item',
totalQty: $sum: '$quantity' ,
,
,
]);
返回结果如下:
[
_id: 'Cappuccino', totalQty: 49 ,
_id: 'Lattes', totalQty: 55 ,
_id: 'Americanos', totalQty: 70 ,
_id: 'Mochas', totalQty: 11
]
示例三:汇总与排序
以下示例使用 $sum 表达式计算了不同产品的销量汇总,并且基于每个产品的总销量(totalQty)从高到低进行了排序:
db.sales.aggregate([
$group:
_id: '$item',
totalQty: $sum: '$quantity' ,
,
,
$sort: totalQty: -1 ,
]);
返回结果如下:
[
_id: 'Americanos', totalQty: 70 ,
_id: 'Lattes', totalQty: 55 ,
_id: 'Cappuccino', totalQty: 49 ,
_id: 'Mochas', totalQty: 11
]
示例四:汇总与过滤
以下示例使用 $sum 表达式计算了不同产品的销量汇总,并且返回了总销量大于 50 的产品:
db.sales.aggregate([
$group:
_id: '$item',
totalQty: $sum: '$quantity' ,
,
,
$match: totalQty: $gt: 50 ,
$sort: totalQty: -1 ,
]);
返回结果如下:
[
_id: 'Americanos', totalQty: 70 ,
_id: 'Lattes', totalQty: 55
]
示例五:基于表达式的汇总
以下示例使用 $sum 表达式计算了不同杯型咖啡的销售金额汇总,销售金额等于销量乘以价格:
db.sales.aggregate([
$group:
_id: '$size',
totalAmount: $sum: $multiply: ['$price', '$quantity'] ,
,
,
$sort: totalAmount: -1 ,
]);
返回结果如下:
[
_id: 'Tall', totalAmount: 1285 ,
_id: 'Grande', totalAmount: 875 ,
_id: 'Short', totalAmount: 182
]
以上是关于《MongoDB入门教程》第23篇 聚合统计之$sum表达式的主要内容,如果未能解决你的问题,请参考以下文章
《MongoDB入门教程》第24篇 聚合统计之$count表达式
《MongoDB入门教程》第25篇 聚合统计之$avg表达式