mongoDB中聚合(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"换成下面想要的字段即可

$push: {"_id": "$_id", "process_code": "$process_code","process_name":"$process_name","wf_type":"$wf_type","cus_approve_event":"$cus_approve_event"}
 

mongodb-模糊查询+聚合函数+连表查询+排序

在 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:输出接近某一地理位置的有序文档。

聚合aggregate 管道运算符(全)

$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基础 使用记录的更多相关文章

  1. C#基础知识记录一

    C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...

  2. DataBase MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  3. MarkDown基础语法记录

    基础语法记录,其中有一些博客园暂不支持 <!--标题--> # 一级标题 # ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 ...

  4. MongoDB基础知识记录

    MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...

  5. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  6. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  7. java基础复习记录

    java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...

  8. 【JSP】JSP基础学习记录(四)—— Servlet

    序: 众所周知JSP的基础也就是Servlet,如果单纯用Servlet类来响应用户的HTTP请求可以吗?答案是肯定的.JSP中的9个内置对象只是自动帮我们初始化的,没有他们一样可以实现web.只是工 ...

  9. LNMP系列网站零基础开发记录(一)

    [目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...

随机推荐

  1. 20175208 《Java程序设计》第八周学习总结

    20175208 2018-2019-3<Java程序设计>第八周学习总结 一.教材学习内容总结: 1.泛型: 泛型的主要目的是可以建立具有类型安全的集合框架(如链表.散列映射等数据结构) ...

  2. Windows Server 2012安装IIS 8.0

    一.安装 1.鼠标右键[This PC]→[Manage] 2.选择[Add Roles and Features] 3.勾选[.Net Framewore 3.5] 和 [.Net Framewor ...

  3. IP通信基础学习第七周(上)

    局域网的优点:具有广播功能,从一个站点可以方便的访问全网,局域网上的主机可共享连接在局域网上的各种资源:便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变:提高了系统的可靠性.可用性和生存性. ...

  4. python关于类和正则表达( 编写一个程序(类))

    1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实 ...

  5. 自制操作系统Antz(9)——实现内核 (下) 实现图形化界面

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  6. 18B20驱动小经验

    在写命令时P14拉高在最后 在读命令时P14在拉低后拉高

  7. FL Studio中音频ASIO4ALL的设置

    上期我们讲解了FL Studio中音频的相关设置,今天我们来进一步讲解音频设置中的ASIO4ALL的设置,FL Studio安装包括FL Studio ASIO和第三方ASIO驱动程序ASIO4ALL ...

  8. 2019十大安卓手游折扣平台app排行榜

    2019游戏版号陆续开放,玩家又有许多好游戏可以玩了. 小编就以当前最热门的十个游戏来点评手游折扣平台App排行榜吧! 排名第一的游戏: 少年西游记-新征程 老平台,集成SDK,良心平台,覆盖全网游戏 ...

  9. windows微信双开

    下面的代码写到xxx.bat文件中 @echo off start /d "D:\software\WeChat\" WeChat.exe start /d "D:\so ...

  10. dom节点相关问题

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...