aggregate基础 使用记录
我们可以用$指定字段
来表示选定的document的field,另外可以使用$$ROOT
来表示选定的document的所有内容(例如:chosenDocument: {$push: '$$ROOT'}
)
示例:按条件查找数据,将找到的结果进行排序并分组,并且需要返回分组后的所有文档内容;$push, $addToSet实现的功能一样
GrowthRecordSync.aggregate([
{ $match: cond },
{ $sort: {time_point: }},
{ $group: {
_id: { $year: "$time_point"},
count:{ $sum: },
result:{
// $addToSet: "$$ROOT"}
$push: "$$ROOT"}
}
},
{ $sort: {_id: }}
],cb)
结果:
"data": [
{
"_id": ,
"count": ,
"result": [
{
"_id": "5c514c3675844415dac30efc",
"createDate": "2019-01-30T07:03:18.000Z",
"lastModified": "2019-01-30T07:03:18.285Z",
"time_point": "2018-11-14T00:00:00.000Z",
"type": "entry",
"eveid": "5bf60a4dfdb0ed18594b8ce6",
"title": "A职",
"description": "",
"client": "584ec02dacbd274539b4ab16",
"people": "5bf60a4dfdb0ed18594b8ce6",
"people_no": "",
"people_name": "成成",
"ou_name": "啊总经办",
"ou": "5858a50bdc2a25120dcf5163",
"terminated": false,
"activate": true,
"block_reason": "",
"block": false,
"validTo": "9999-12-31T15:59:59.999Z",
"validFrom": "2019-01-29T16:00:00.000Z",
"__v":
}
]
},
{
"_id": ,
"count": ,
"result": [
{
"_id": "5c6a979b1a921a16cc592fac",
"createDate": "2019-02-18T11:31:39.000Z",
"lastModified": "2019-02-18T11:31:39.062Z",
"client": "584ec02dacbd274539b4ab16",
"people": "5bf60a4dfdb0ed18594b8ce6",
"people_no": "",
"ou_name": "33总经办",
"ou": "5858a50bdc2a25120dcf5163",
"time_point": "2019-02-20T00:00:00.000Z",
"create_people": "585a17ae2098688d02eeade7",
"type": "cus",
"eveid": "5c6a979b1a921a16cc592fab",
"title": "098765432dd1",
"description": "",
"terminated": false,
"activate": true,
"block_reason": "",
"block": false,
"validTo": "9999-12-31T15:59:59.999Z",
"validFrom": "2019-02-17T16:00:00.000Z",
"img": [
"5c6a97221a921a16cc592fa5"
],
"__v":
},
{
"_id": "5c6a97271a921a16cc592fa9",
"createDate": "2019-02-18T11:29:43.000Z",
"lastModified": "2019-02-18T11:29:43.810Z",
"client": "584ec02dacbd274539b4ab16",
"people": "5bf60a4dfdb0ed18594b8ce6",
"people_no": "",
"ou_name": "33总经办",
"ou": "5858a50bdc2a25120dcf5163",
"time_point": "2019-02-20T00:00:00.000Z",
"create_people": "585a17ae2098688d02eeade7",
"type": "cus",
"eveid": "5c6a97271a921a16cc592fa8",
"title": "098765432dd1",
"description": "",
"terminated": false,
"activate": true,
"block_reason": "",
"block": false,
"validTo": "9999-12-31T15:59:59.999Z",
"validFrom": "2019-02-17T16:00:00.000Z",
"img": [
"5c6a97221a921a16cc592fa5"
],
"__v":
}
]
}
选取部分字段,将"$$ROOT"换成下面想要的字段即可
在 mongodb中用的主要是$regex来实现模糊查询
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
例:table1:
{_id:,result:[
{name:"a",age:""},
{name:"b",age:""},
{name:"c",age:""}]
}
执行db.table1.aggregate({"$unwind":"$result"})后的结果为
{id:,result:{name:"a",age:""}},
{id:,result:{name:"b",age:""}},
{id:,result:{name:"c",age:""}}
$group:将集合中的文档分组,可用于统计结果。 $sort:将输入文档排序后输出。 $geoNear:输出接近某一地理位置的有序文档。
$setIntersection: 是取两个数组的交集
isShow: { $setIntersection: [ "$positions", current_positions ] }
实用注意事项记录:
ProcessDefine.aggregate({
$match: {process_code: 'CustomizeAttendance', block: false, client: ObjectId(client)}
},{
$lookup: { //lookup连表查询后都是数组,就算原来的结构是对象的连表后查出的结构也是数据
from: 'cusitemapproveevents', // 数据库中的表名(全部小写,默认加s)
localField: 'cus_approve_event',
foreignField: '_id',
as: 'cus_approve_event',
}
},{
$unwind:{ // 将数组结构换为对象结构
path: '$cus_approve_event',
preserveNullAndEmptyArrays:true
}
},
{
$group:{
_id: {cus_approve_event:"$cus_approve_event._id", approve_name: "$cus_approve_event.approve_name"}, //分组,一个值的分组_id:"$cus_approve_event._id", 对两个值进行分组,传对象。
count:{ $sum: 1},
result:{
// $push: "$$ROOT" // 全部字段
$push: {"_id": "$_id", "process_code": "$process_code","process_name":"$process_name","wf_type":"$wf_type","cus_approve_event":"$cus_approve_event"} } } // 只选需要的字段
}).exec(function(err,data){
res.json(data);
})
}
aggregate基础 使用记录的更多相关文章
- C#基础知识记录一
C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MarkDown基础语法记录
基础语法记录,其中有一些博客园暂不支持 <!--标题--> # 一级标题 # ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 ...
- MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MVC+Ext.net零基础学习记录(五)
继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...
- MVC+Ext.net零基础学习记录(四)
在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...
- java基础复习记录
java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...
- 【JSP】JSP基础学习记录(四)—— Servlet
序: 众所周知JSP的基础也就是Servlet,如果单纯用Servlet类来响应用户的HTTP请求可以吗?答案是肯定的.JSP中的9个内置对象只是自动帮我们初始化的,没有他们一样可以实现web.只是工 ...
- LNMP系列网站零基础开发记录(一)
[目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...
随机推荐
- 帮助Bsny(乱搞做法)
帮助Bsny 题目描述 Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30, ...
- 解析搜狗实验室精简版数据:1、批量将.txt编码格式转化为utf8 2、解析提取数据
在搜狗实验室里下载了精简版的数据,解压后是一个文件,里面有很多个.txt文档,里面编码格式都是ASCII.现需要将这些编码格式转化为utf-8,以下是python3语言编写的脚本,一般只需改变path ...
- Cannot locate BeanDefinitionParser for element [scoped-proxy]
指定使用 CGLIB 而不使用 JDK 生成代理对象:注意:此两个标签必须同时出现,不然会报:Cannot locate BeanDefinitionParser for element [scope ...
- 浅谈USB驱动架构 转载
去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性.USB驱动非常庞大,多个软件层次相互交错,以及各种协议,USB系统对于一般人很难理解,我对其也只是理解一个大概,下面,我对 ...
- C++隐藏任务栏图标
在VC编程中,有时候我们需要将我们的程序在任务栏上的显示隐藏起来,我试过几种方法,下面我介绍一下我知道的三种方法. 第一种方法是设置窗口WS_EX_TOOLWINDOW扩展样式,通过在OnInitDi ...
- 2.4JAVA基础复习——JAVA语言的基础组成数组
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
- CentOS 7安装mysql(rpm)
1.检查是否安装了mysql rpm -qa|grep -i mysql centos7默认是安装的mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb 2 ...
- 如何对tcp流认证并加密
一个场景:目前越来越多的业务需要远程读写Redis,而Redis 本身不提供 SSL/TLS 的支持,在需要安全访问的环境下. 这时候就需要额外的手段进行加密认证,这里有两种手段:spiped 和 n ...
- 加域电脑登陆系统后桌面文件丢失,登录系统提示用户名为“Temp”。
注册表中定位到“HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\ProfileList”, ...
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...