码迷,mamicode.com
首页 > 数据库 > 详细

Mongodb aggregation 基本操作示例

时间:2017-11-19 13:35:24      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:组合   jin   www   ros   find   filter   3.5   fish   family   

MongoDB二个主要的操作:一个是查询,另一个是统计。对于查询而言,主要是find()方法,再配合Filters组合多个查询条件

对于统计而言,则主要是aggregate操作,比如 group、sum、avg、project、match……

aggregate可以将上述操作组织成 pipeline 形式,依次经过各种操作处理。

 

本文是MongoDB University M101的课程笔记,主要记录:MongoDB aggregate的一些常用操作。

①project

它是个1:1的操作,即一个Document输入给project处理,输出一个新的Document。它主要对Key进行处理(大小写转换、删除原来Document某些Key……)

比如原Document如下:

{
    "city" : "ACMAR",
    "loc" : [
        -86.51557,
        33.584132
    ],
    "pop" : 6055,
    "state" : "AL",
    "_id" : "35004"
}

想把它变成:

{
    "city" : "acmar",
    "pop" : 6055,
    "state" : "AL",
    "zip" : "35004"
}

使用:project操作符进行处理:

db.zips.aggregate([
{$project:{_id:0, city:{$toLower:"$city"}, pop:1, state:1, zip:"$_id"}}
])
_id:0  去掉原Document中的_id字段;city:{$ toLower:"$city"}   对原Document中的 "$city" 的值全部转换成小写,赋给新city字段

pop:1  state:1  表示将原Document中的 pop 字段、state 字段 放到新Document中

zip:"$_id" 将原Document中的 ‘_id‘字段值  赋值给 新的 "zip" 字段  

 

②group avg,根据分组求平均值。比如某个Document格式如下:对 state字段进行分组,求每个state的人口(pop)的平均值

{
    "city" : "FISHERS ISLAND",
    "loc" : [
            -72.017834,
            41.263934
    ],
    "pop" : 329,
    "state" : "NY",
    "_id" : "06390"
}

 

db.zips.aggregate([
{"$group":{"_id":"$state", "average_pop":{"$avg":"$pop"}}}
])

$group表示分组操作,执行该操作后会生成一个新Document。

_id:$state 表示对 $state 字段进行分组,生成的新Document的 _id 为 state的值
"$avg":"$pop" 表示对原Document中的 “pop”字段按 $state 分组求平均值。得到的平均值为 "average_pop"字段的值。

最终的结果如下:

{ "_id" : "NY", "average_pop" : 9705.34 }
{ "_id" : "CT", "average_pop" : 13226.48 }
{ "_id" : "CA", "average_pop" : 19067.72 }
{ "_id" : "NJ", "average_pop" : 16949.9 }

 

③match

Document示例如下:想要过滤人口字段(pop)大于100 000 的所有记录。

{
    "city" : "ACMAR",
    "loc" : [
        -86.51557,
        33.584132
    ],
    "pop" : 6055,
    "state" : "AL",
    "_id" : "35004"
}

 

db.zips.aggregate([
{$match:{
    pop:{$gt:100000}
    }
}
])

$match表示对 Document进行过滤

pop:{$gt:100000} 表示根据 pop 字段过滤,过滤的条件为 pop 的值大于100000

 

Mongodb aggregation 基本操作示例

标签:组合   jin   www   ros   find   filter   3.5   fish   family   

原文地址:http://www.cnblogs.com/hapjin/p/7859434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!