静,是一种休息,更是一种修行。所有的烦恼,都来自于喧嚣,所有的伤痛,都来自于躁动。身体奔波太久会劳累,灵魂游离太久会成伤。红尘淹没了纯洁,欲望吞噬了安详,经年后,心若一动,泪已千行。 停一停追逐的脚步,缓一缓紧绷的心弦,让心宁静,让伤口复原,让灵魂升华。

Mongo数据库聚合学习

| 发表于:2017-05-03 18:07:31 | 日志分类:后台开发 | 阅读量:(320)

一、简介

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

MongoDB中聚合的方法使用aggregate()。

操作符介绍:

1

$project

返回哪些字段,select,说它像select其实是不太准确的,因为aggregate是一个阶段性管道操作符,$project是取出哪些数据进入下一个阶段管道操作,真正的最终数据返回还是在group等操作中;

2

$match

放在group前相当于where使用,放在group后面相当于having使用

3

$limit

相当于limit m,不能设置偏移量

4

$skip

忽略结果的数量,跳过第几个文档

5

$sort

按照给定的字段排序结果

6

$group

按什么字段分组,注意所有字段名前面都要加$,否则mongodb就为以为不加$的是普通常量

7

$unwind

分割嵌入数组到自己顶层文件,把文档中的数组元素打开,并形成多个文档

 

二、使用示例

1查找店铺ID『128528899』所有商品数据

 

db.items.aggregate(

{$match: {shopid: "128528899"}}

)

 

2求出店铺ID『128528899』中所有商品的平均价格

db.items.aggregate(

{$match: {shopid: "128528899"}},

{$unwind: "$price"},

{$group: { _id: {shopid:"$shopid"}, per:{$avg:"$price"}}}

)

 

3、统计每个店铺的商品数量

db.items.aggregate(

{"$project" : {"shopid" : 1}},

{"$group" : {"_id" : "$shopid", "count" : {"$sum" : 1}}},

{"$sort" : {"count" : -1}}

)

 

4、查出总销量小于100000的店铺

db.items.aggregate(

     {$group:{_id:"$shopid",totalPop:{$sum:"$sold"}}},

     {$match:{totalPop:{$lt:100000}}}

)

 

5、查出每个店铺中每个商品的总销量

db.items.aggregate(

   { $group : 

          { _id : { shopid : "$shopid", item_id : "$item_id" }, 

          shopTotalSold: { $sum : "$totalSoldQuantity"} }

   }

) 

 


6、统计每个店铺中商品的创建时间大于并小于某个时间

db.items.aggregate([ 

    {$match: { "createtime" :{"$gte": ISODate("2016-05-04T06:14:51.321Z"),"$lte": ISODate("2017-05-04T06:14:51.321Z")}}}, 

    {$group: {_id: {"shopid": "$shopid"}, "count": {$sum: 1}}}, 

    {$sort: {_id: 1}}, 

    {$limit: 100} 

])

 

7、查询表shops下的所有商品(两表关联查询)

db.shops.aggregate([

     {

        $lookup:

          {

           from: "items",

           localField: "shopId",

           foreignField: "shopid",

           as: "inventory"

         }

    }

 ])