《MongoDB入门教程》第23篇 聚合统计之$sum表达式

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

本文将会介绍如何利用 $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 }
]
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go

“《MongoDB入门教程》第23篇 聚合统计之$sum表达式” 的相关文章