zoukankan      html  css  js  c++  java
  • aggregate基础 使用记录

    mongoDB中聚合(aggregate)的具体使用

    我们可以$指定字段来表示选定的document的field,另外可以使用$$ROOT来表示选定的document的所有内容(例如:chosenDocument: {$push: '$$ROOT'}

    示例:按条件查找数据,将找到的结果进行排序并分组,并且需要返回分组后的所有文档内容;$push, $addToSet实现的功能一样

    GrowthRecordSync.aggregate([
                    { $match: cond },
                    { $sort: {time_point: 1}},
                    { $group: {
                        _id: { $year: "$time_point"}, 
                        count:{ $sum: 1}, 
                        result:{ 
                            // $addToSet: "$$ROOT"}
                            $push: "$$ROOT"}
                        }
                    },
                    { $sort: {_id: 1}}
                ],cb)

    结果:

    "data": [
        {
          "_id": 2018,
          "count": 1,
          "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": "00000009",
              "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": 0
            }
          ]
        },
        {
          "_id": 2019,
          "count": 2,
          "result": [
            {
              "_id": "5c6a979b1a921a16cc592fac",
              "createDate": "2019-02-18T11:31:39.000Z",
              "lastModified": "2019-02-18T11:31:39.062Z",
              "client": "584ec02dacbd274539b4ab16",
              "people": "5bf60a4dfdb0ed18594b8ce6",
              "people_no": "00000009",
              "ou_name": "33总经办",
              "ou": "5858a50bdc2a25120dcf5163",
              "time_point": "2019-02-20T00:00:00.000Z",
              "create_people": "585a17ae2098688d02eeade7",
              "type": "cus",
              "eveid": "5c6a979b1a921a16cc592fab",
              "title": "098765432dd1",
              "description": "88776787888",
              "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": 0
            },
            {
              "_id": "5c6a97271a921a16cc592fa9",
              "createDate": "2019-02-18T11:29:43.000Z",
              "lastModified": "2019-02-18T11:29:43.810Z",
              "client": "584ec02dacbd274539b4ab16",
              "people": "5bf60a4dfdb0ed18594b8ce6",
              "people_no": "00000009",
              "ou_name": "33总经办",
              "ou": "5858a50bdc2a25120dcf5163",
              "time_point": "2019-02-20T00:00:00.000Z",
              "create_people": "585a17ae2098688d02eeade7",
              "type": "cus",
              "eveid": "5c6a97271a921a16cc592fa8",
              "title": "098765432dd1",
              "description": "88776787888",
              "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": 0
            }
        ]
    }

    选取部分字段,将"$$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:1,result:[
        {name:"a",age:"18"},
        {name:"b",age:"19"},
        {name:"c",age:"20"}]
    } 
    执行db.table1.aggregate({"$unwind":"$result"})后的结果为
    {id:1,result:{name:"a",age:"18"}},
    {id:1,result:{name:"b",age:"19"}},
    {id:1,result:{name:"c",age:"20"}} 
    $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); 
       }) 
    }
    

      

     

  • 相关阅读:
    文件包含漏洞
    任意文件上传
    改变弱口令威胁,从意识开始
    Node.js学习笔记10--Express搭网站(2)
    Node.js学习笔记9——Express框架
    Node.js学习笔记8
    Node.js学习笔记7-文件系统
    node.js学习笔记6
    node.js学习笔记5——核心模块1
    Node.js学习4
  • 原文地址:https://www.cnblogs.com/Joans/p/10416941.html
Copyright © 2011-2022 走看看