首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在猫鼬3条件下对数据进行分组

如何在猫鼬3条件下对数据进行分组
EN

Stack Overflow用户
提问于 2022-03-02 09:39:39
回答 1查看 195关注 0票数 1

如何将集合猫鼬的数据按一定的条件分组,按以下3种条件分组:<5小时、5~9小时、>9小时。

按timeworkDay分组的数据。如果timeWorkDay数据小于5,它将被分组为timework5,如果数据大于5,小于9,则数据将分组为timework59,如果大于9,则将数据分组为timework9。

样本数据

代码语言:javascript
复制
const data = [
    {
        "_id": "620f3f7a2148a8227855068f",
        "timeWorkDay": 8,
        "created_at": "2022-02-18T06:40:58.932Z",
        "updated_at": "2022-02-18T07:54:59.331Z",
        "__v": 0,
    },
    {
        "_id": "6201e0e52faf8f0228dfad27",
        "created_at": "2022-02-08T03:17:57.018Z",
        "updated_at": "2022-02-08T03:17:57.018Z",
        "__v": 0,
        "timeWorkDay": 12,
    },
    {
        "_id": "61f21be553b6de54a8ef4e0b",
        "id_company": "61e00d1a144fa470f1870154",
        "created_at": "2022-02-03T02:48:57.006Z",
        "updated_at": "2022-02-01T02:04:29.778Z",
        "__v": 0,
        "timeWorkDay": 14,
    },
    {
        "_id": "61fb45647dda6444afd10e2e",
        "created_at": "2022-02-03T02:48:57.006Z",
        "updated_at": "2022-02-22T08:10:39.775Z",
        "__v": "2022-02-06T17:00:00.000Z",
        "timeWorkDay": 5,
    },
    More...
]

和预期数据

代码语言:javascript
复制
const result = [
timeWork5:[
    {
        "_id": "61fb45647dda6444afd10e2e",
        "created_at": "2022-02-03T02:48:57.006Z",
        "updated_at": "2022-02-22T08:10:39.775Z",
        "__v": "2022-02-06T17:00:00.000Z",
        "timeWorkDay": 5,
    },
    More...
],
timeWork59: [
    {
        "_id": "620f3f7a2148a8227855068f",
        "timeWorkDay": 8,
        "created_at": "2022-02-18T06:40:58.932Z",
        "updated_at": "2022-02-18T07:54:59.331Z",
        "__v": 0,
    },
    More...
],
timeWork9: [
    {
        "_id": "6201e0e52faf8f0228dfad27",
        "created_at": "2022-02-08T03:17:57.018Z",
        "updated_at": "2022-02-08T03:17:57.018Z",
        "__v": 0,
        "timeWorkDay": 12,
    },
    {
        "_id": "61f21be553b6de54a8ef4e0b",
        "id_company": "61e00d1a144fa470f1870154",
        "created_at": "2022-02-03T02:48:57.006Z",
        "updated_at": "2022-02-01T02:04:29.778Z",
        "__v": 0,
        "timeWorkDay": 14,
    },
    More...
],
]

我试过几种方法,但没有得到我预期的结果

代码语言:javascript
复制
const execQuery: any = await EmployeeModel.aggregate([
      {
        $group: {
          _id: {
            timeWorkDay5: {
              $cond: [
                {$lte: ["$timeWorkDay", 4]}
              ]
            },
            timeWorkDay9: {
              $cond: [
                {$gte: ["$timeWorkDay", 7]}
              ]
            },
          },
          createdAt: { $first: "$joinDate" },
          count: { $sum: 1 }
        }
      },
      { $sort: { joinDate: -1 } }
    ]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-02 09:50:24

认为$facet符合您的要求。

代码语言:javascript
复制
const execQuery: any = await EmployeeModel.aggregate([
  {
    $facet: {
      timeWorkDay5: [
        {
          $match: {
            $expr: {
              $lte: [
                "$timeWorkDay",
                4
              ]
            }
          }
        }
      ],
      timeWorkDay59: [
        {
          $match: {
            $expr: {
              $and: [
                {
                  $gte: [
                    "$timeWorkDay",
                    5
                  ]
                },
                {
                  $lt: [
                    "$timeWorkDay",
                    9
                  ]
                }
              ]
            }
          }
        }
      ],
      timeWorkDay9: [
        {
          $match: {
            $expr: {
              $gte: [
                "$timeWorkDay",
                9
              ]
            }
          }
        }
      ]
    }
  }
])

蒙戈游乐场样本

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71320443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档