mongodb聚合

发布时间:2020-04-05

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

aggregate() 方法

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

示例

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

常用聚合表达式

表达式描述实例
$sum计算总和db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {sum:"sum : "likes"}}}])
$avg计算平均值db.mycol.aggregate(db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {avg:"avg : "likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {min:"min : "likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {max:"max : "likes"}}}])
$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{group : {_id : "by_user", url : {push:"push: "url"}}}])
$addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{group : {_id : "by_user", url : {addToSet:"addToSet : "url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{group : {_id : "by_user", first_url : {first:"first : "url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{group : {_id : "by_user", last_url : {last:"last : "url"}}}])

管道

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • match:用于过滤数据,只输出符合条件的文档。match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
  • limit:用来限制MongoDB聚合管道返回的文档数。limit:用来限制MongoDB聚合管道返回的文档数。 -skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。 -unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 -group:将集合中的文档分组,可用于统计结果。 -sort:将输入文档排序后输出。sort:将输入文档排序后输出。 -geoNear:输出接近某一地理位置的有序文档。