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 服务器配 ...
随机推荐
- laravel5.7 前后端分离开发 实现基于API请求的token认证
最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...
- python locust 性能测试:HOOKS<钩子方法>
为locust中不同类型的事件,提供的钩子方法: from locust import TaskSet, task, events, Locust from locust.clients import ...
- python3下爬取网页上的图片的爬虫程序
import urllib.request import re #py抓取页面图片并保存到本地 #获取页面信息 def getHtml(url): html = urllib.request.urlo ...
- mysql数据类型优化
选择优化的数据类型原则: 1. 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少. 2. 简单 ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- 设置webstorm自动删除行尾分号
- java基础——IO流之File类
1.File类的构造方法: File(String pathName):通过一个指定的字符串类型路径来创建一个文件对象 File (String parent,String child):通过指定 ...
- 面试官问我“Java中的锁有哪些?以及区别”,我跪了
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...
- 2018年-2019年第二学期第五周C#学习个人总结
在本周我学习了第五章面向对象高级中的5.3多态,5.3多态中主要包括重写父类方法,多态的实现,base关键字,里氏转换原则,Object类.在重写父类方法中要求当重写父类的方法时,要求子类的方法名,参 ...
- POJ 2663 Tri Tiling 【状压DP】
Description In how many ways can you tile a 3xn rectangle with 2x1 dominoes? Here is a sample tilin ...