Mongoose: aggregate聚合 $group使用说明
aggregate聚合是通过管道操作实现的。聚合管道里的每一步输出,都会作为下一步的输入,每一步在输入文档执行完操作后生成输出文档。
聚合管道:
$project 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。对应project()方法
$match 用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。对应match()。
$limit 用来限制MongoDB聚合管道返回的文档数。对应limit()方法
$skip 在聚合管道中跳过指定数量的文档,并返回余下的文档。对应skip()。
$unwind 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。对应unwind()方法
$group 将集合中的文档分组,可用于统计结果。对应group()方法
$sort 将输入文档排序后输出。对应sort()方法
$geoNear 输出接近某一地理位置的有序文档。对应near()。
$group表达式说明:
$sum 计算总和
$avg 计算平均值
$min 获取每一组集合中所有文档对应值得最小值
$max 获取每一组集合中所有文档对应值得最大值
$push 在结果文档中插入值到一个数组中
$addToSet 在结果文档中插入值到一个数组中,但不创建副本
$first 根据资源文档的排序获取第一个文档数据
$last 根据资源文档的排序获取最后一个文档数据
举例说明aggregate聚合 $group使用
商品属性:_id, createTime, nowPriceL, nowPriceH, number
统计每一天内店铺商品的最低价和最高价,平均最低价,
执行完$match管道后,得到的查询结果会输入到$project管道,执行完$project管道,得到的结果格式为{day,nowPriceL,nowPriceH},把这个结果输入$group管道,
$group管道执行完毕,输出的结果输入到$sort管道,$sort执行完毕,输出最终结果集
Goods.aggregate([
{
$match: {
number: {$gte:100} //匹配number>=100的记录
}
},
{
$project : {
day : {$substr: [{"$add":["$createTime", 28800000]}, 0, 10] },//时区数据校正,8小时换算成毫秒数为8*60*60*1000=288000后分割成YYYY-MM-DD日期格式便于分组
"nowPriceL": 1, //设置原有nowPriceL为1,表示结果显示原有字段nowPriceL
"nowPriceH":1, //设置原有nowPriceH为1,表示结果显示原有字段nowPriceH
avgNowPriceL:{$toDouble:"$nowPriceL"},//把最低价转换为小数
avgNowPriceH:{$toDouble:"$nowPriceH"},//把最高价转换为小数
"dayNumber":1 //每组内有多少个成员
},
}, {
$group: {
_id:"$day", //按照$day进行分组(一组为1天)
nowPriceL:{$min: "$nowPriceL"}, //查找组内最小的nowPriceL
nowPriceH:{$max: "$nowPriceH"}, //查找组内最大的nowPriceH
avgNowPriceL:{$avg:"$avgNowPriceL"},//统计每一天内店铺商品的平均最低价
avgNowPriceH:{$avg:"$avgNowPriceH"},//统计每一天内店铺商品的平均最高价
dayNumber:{$sum:1}
}
},
{
$sort: {
nowPriceL: 1//执行完 $group,得到的结果集按照nowPriceL升序排列
}
}]).exec(function (err, goods){
//返回结果
console.log(goods);
});
注意:
mongoodb存储的数据是按照世界时间存储的,因此进行分割操作时需要对时间进行时区校正,使用$add加上时区差8小时(毫秒数)才能得到正确的数据
$substr: [ <string>, <start>, <length> ] }
https://docs.mongodb.com/manual/reference/operator/aggregation/toDouble/#exp._S_toDouble
Mongoose: aggregate聚合 $group使用说明的更多相关文章
- aggregate聚合
最近使用mongodb需要查询数据,用到了aggregate,学习下,上代码 db.表名.aggregate([ {$match:{'created_time':{$gte:'2016-01-15', ...
- MongoDB的aggregate聚合
聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...
- MongoDB中的数据聚合工具Aggregate和Group
周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...
- Pandas的数据分组-aggregate聚合
在对数据进行分组之后,可以对分组后的数据进行聚合处理统计. agg函数,agg的形参是一个函数会对分组后每列都应用这个函数. import pandas as pd import numpy as n ...
- node使用 mongoose聚合 group
var mongoose = require('mongoose'); mongoose.connect("mongodb://localhost:27017/test", fun ...
- MongoDB的分组统计 group
mongodb中的分组聚合用$group,而且处理的最大数据量为100M如果超出需要写入到磁盘,使用格式如下: { $group: { _id: <expression>, <fie ...
- oracle having sum group by 详解
Aggregate functions (like SUM) often need an added GROUP BY functionality. 集合函数(类似SUM)经常需要用GROUP BY来 ...
- SQL sum和group by HAVING
Aggregate functions (like SUM) often need an added GROUP BY functionality. 集合函数(类似SUM)经常需要用GROUP BY来 ...
- MongoDB基础
1.概念及特点 说明:由于部分语句中$ 符号无法正常显示,使用¥代表 概念 MongoDB是一个基于文档的分布式的开源的NoSQL数据库,文档的结构为BSON形式,每一个文档都有一个唯一的Object ...
随机推荐
- CF - 1106 E Lunar New Year and Red Envelopes DP
题目传送门 题解: 首先要处理出每个时间点会选择哪一个线段. 对于这个问题,可以用multiset去维护信息. 当时间线开始的时候,往mutiset里面插入这个信息,当时间线结束的时候,删除这个信息. ...
- andriod开发--使用Http的Get和Post方式与网络交互通信
package com.example.a350773523.myapplication; import android.os.AsyncTask; import android.support.v7 ...
- Spring@Autowired java.lang.NullPointerException 空指针
在使用@Autowired注解注入出现的空指针 java.lang.NullPointerException 可能存在的错误原因: 1.注解的扫描有问题 在xml配置了这个标签后,spring可以 ...
- Tomcat性能调优参数简介
近期,我们的一个项目进入了试运营的阶段,在系统部署至阿里云之后,我们发现整个系统跑起来还是比较慢的,而且,由于代码的各种不规范,以及一期进度十分赶的原因,缺少文档和完整的测试,整个的上线过程一波三折. ...
- 爬虫基本知识之C/S交互
概念 爬虫就是对网页的获取. 一般获取的网页中又有通向其他网页的通路,我们叫做超链接,那么就可以通过这样的通路获取更多其他的网页,就像一只在网路上爬行的蜘蛛,所以俗称爬虫. 爬虫的工作原理和浏览器浏览 ...
- 那些年,我们误解的 JavaScript 闭包
说到闭包,大部分的初始者,都是谈虎色变的.最近对闭包,有了自己的理解,就感觉.其实我们误解闭包.也被网上各种说的闭包的解释给搞迷糊. 一句话:要想理解一个东西还是看权威的东西. 下面我来通俗的讲解一个 ...
- Vert.x 之 HelloWorld
Hello World 欢迎来到Vert.x的世界,相信您在接触Vert.x的同时,迫不及待想动手试一试,如您在学习计算机其它知识一样,总是从Hello World开始,下面我们将引导您制作一个最基本 ...
- [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境
1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...
- 配置Linux使用LDAP用户认证
配置Linux使用LDAP用户认证 本文首发:https://www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html 我这里使用的是Cent ...
- CentOS7上OpenResty安装
1,OpenResty安装 通过repl源安装: sudo yum-config-manager --add-repo https://openresty.org/yum/cn/centos/Open ...