mongodb聚合
来源:互联网 发布:apple pencil配套软件 编辑:程序博客网 时间:2024/06/10 08:09
聚合aggregate
统计功能,用来计算数据
db.集合名称.aggregate([{管道:{表达式}}])管道(|):把上一次的结果输出,作为下次结果的输入
聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
$Group
- counter : 结果字段
- {$sum:1} : 每一行+1
- $sum : 前面加%$, 表示属性
- 1表示统计个数
- _id:null : 将整个集合分成一组
db.stu.aggregate( {$group:{_id:'$age',counter:{$sum:1}}})# 按照年龄求和db.stu.aggregate( {$group:{_id:'$age',counter:{$sum:'$age'}}})# avg:平均值 min/max/first/last/push ...
push: 把基于counter分组结果加到数组中去
输出:{ "_id" : 13.0, "counter" : [ 13.0, 13.0, 13.0 ]}
获取整个文档:$$ROOT
db.stu.aggregate( {$group:{_id:'$age',counter:{$push:'$$ROOT'}}})
输出:
{ "_id" : 23.0, "counter" : [ { "_id" : ObjectId("59cd646e68b8b37683687a6d"), "name" : "dimples", "age" : 23.0 } ]}
$match
- 用于过滤数据,只输出符合条件的文档
- 使用MongoDB的标准查询操作
查询年龄>20的学生
db.stu.aggregate( {$match:{age: {$gt:20}}})
查询年龄>10的人数
db.stu.aggregate( {$match:{age: {$gt:10}}}, {$group:{ _id:'$age', counter:{$sum:1} }})
$project 投影
- 修改输入文档的结构(显示那些字段..)
基于: 查询年龄>10的人数,显示counter
db.stu.aggregate( {$match:{age: {$gt:10}}}, {$group:{ _id:'$age', counter:{$sum:1} }}, {$project:{_id:0,counter:1}})
$sort
- 基于$group之后写
排序
db.stu.aggregate( {$match:{age: {$gt:10}}}, {$group:{ _id:'$age', counter:{$sum:1} }}, {$project:{_id:1,counter:1}}, {$sort:{_id:1}})
$unwind拆分数组
- 把文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
- 从输入文档中解构一个数组字段,以输出每个元素的文档。每个输出文档都是由元素替换的数组字段的值的输入文档。
对某字段值进行拆分
db.集合名称.aggregate([{$unwind:'$字段名称'}])
构造数据:
db.p2.insert({_id:1,title:'t-shirt',size:['M','L','S']})
查询:
db.p2.aggregate([ {$unwind:'$size'}])
处理空数组、无字段、null情况
- includeArrayIndex : 用于保存元素的数组索引的新字段的名称。该名称不能以美元符号开始$。
- preserveNullAndEmptyArrays(boolean)
- 如果true,如果path为空,缺少或空数组,则 $unwind输出文档。不会丢失。
- 如果false,如果$unwind文件path为空,丢失或空数组, 则不输出文档。会丢失。
db.p2.aggregate([ {$unwind:{ path:'$size', preserveNullAndEmptyArrays:true }}])
db.stu.aggregate([ {$group:{_id:'$age',counter:{$sum:1},docs:{$push:'$$ROOT'}}}, {$project:{_id:0,counter:1,docs:1}}, {$unwind:'$docs'}])
阅读全文
0 0
- MongoDB聚合
- MongoDB 聚合
- mongoDB聚合
- MongoDB 聚合
- MongoDB 聚合
- Mongodb 聚合
- Mongodb聚合
- Mongodb-聚合
- mongodb聚合
- MongoDB 聚合
- MongoDB-聚合
- MongoDB聚合
- MongoDB 聚合
- MongoDB 聚合
- MongoDB聚合
- MongoDB 聚合
- mongodb聚合
- MongoDB 聚合
- XLog
- tracert使用
- Qt下汉字转拼音,包含二级汉字
- 基于FLOWLAYOUT的改造,支持每行最大个数和每行元素高度居中。
- Erlang相关Appups/热更介绍及坑点
- mongodb聚合
- WindowManager.LayoutParams.type属性
- Nginx初探
- 超连接提交表单数据
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
- ubuntu安装及使用wine
- Java学习笔记(一)
- poj1741(点分治)
- Jedis 与 ShardedJedis 设计