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

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MongoDB入门教程》第25篇 聚合统计之$avg表达式相关的知识,希望对你有一定的参考价值。

本文将会介绍如何利用 $avg 表达式返回一组数字的平均值。

$avg 表达式

MongoDB $avg 表达式的作用是返回一组数据的平均值,语法如下:

 $avg: <expression> 

$avg 表达式将会忽略任何非数字数据和缺失的数据。如果所有的数据都是非数字数据,表达式将会返回 null。

$avg 示例

以下示例将会使用 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")
]);

示例一:平均销售数量

以下示例将文档按照T item 字段进行分组,然后使用 $avg 表达式计算每个组的平均销售数量:

db.sales.aggregate([
  
    $group: 
      _id: '$item',
      averageQty:  $avg: '$quantity' ,
    ,
  ,
]);

输出结果如下:

[
   _id: 'Americanos', averageQty: 17.5 ,
   _id: 'Lattes', averageQty: 27.5 ,
   _id: 'Mochas', averageQty: 11 ,
   _id: 'Cappuccino', averageQty: 16.333333333333332 
]

示例二:平均销售金额

以下示例将文档按照T item 字段进行分组,然后使用 $avg 表达式计算每个组的平均销售金额:

db.sales.aggregate([
  
    $group: 
      _id: '$item',
      averageAmount:  $avg:  $multiply: ['$quantity', '$price']  ,
    ,
  ,
   $sort:  averageAmount: 1  ,
])

返回结果如下:

[
   _id: 'Cappuccino', averageAmount: 127.33333333333333 ,
   _id: 'Americanos', averageAmount: 140 ,
   _id: 'Mochas', averageAmount: 275 ,
   _id: 'Lattes', averageAmount: 562.5 
]

示例三:平均值与过滤

以下示例使用 $avg 表达式计算每个组的平均销售金额,并且返回了平均销售金额大于 150 的产品:

db.sales.aggregate([
  
    $group: 
      _id: '$item',
      averageAmount:  $avg:  $multiply: ['$quantity', '$price']  ,
    ,
  ,
   $match:  averageAmount:  $gt: 150   ,
   $sort:  averageAmount: 1  ,
]);

返回的结果如下:

[
   _id: 'Mochas', averageAmount: 275 ,
   _id: 'Lattes', averageAmount: 562.5 
]

以上是关于《MongoDB入门教程》第25篇 聚合统计之$avg表达式的主要内容,如果未能解决你的问题,请参考以下文章

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

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

《MongoDB入门教程》第26篇 聚合统计之$max/$min表达式

《MongoDB入门教程》第22篇 聚合操作

《MongoDB入门教程》第22篇 聚合操作

《MongoDB入门教程》第22篇 聚合操作