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); 
       }) 
    }
    

      

     

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/Joans/p/10416941.html
Copyright © 2011-2022 走看看