首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB如何聚合,但每个日期字段只包含一个结果?

MongoDB如何聚合,但每个日期字段只包含一个结果?
EN

Stack Overflow用户
提问于 2021-09-12 03:37:35
回答 1查看 27关注 0票数 1

我试图聚合结果,但我需要每个日期/一天只包含一个结果。下面是我的查询当前的样子:

代码语言:javascript
运行
复制
.aggregate([
        {
          $lookup: {
            from: 'community_stats',
            as: 'stats',
            let: { id: '$_id' },
            pipeline: [
              {
                $match: {
                  $expr: { $eq: ['$community', '$$id'] },
                },
              },
              { $sort: { date: -1 } },
              { $limit: 5 },
            ],
          },
        },
      ])

它返回如下数组:

代码语言:javascript
运行
复制
stats: [
    {
      _id: new ObjectId("613d42f20e8023815b8f0ad3"),
      community: new ObjectId("6138ef0a00895c22c6cd3b68"),
      data: [Object],
      date: 2021-09-11T23:59:46.998Z
    },
    {
      _id: new ObjectId("613b784e564ee6ad3e2dbb14"),
      community: new ObjectId("6138ef0a00895c22c6cd3b68"),
      data: [Object],
      date: 2021-09-10T15:22:54.764Z
    },
    {
      _id: new ObjectId("6139f9487e4c964ef9dafd11"),
      community: new ObjectId("6138ef0a00895c22c6cd3b68"),
      data: [Object],
      date: 2021-09-09T12:08:40.198Z
    },
    {
      _id: new ObjectId("6139f6eac570e66aa60a8b5f"),
      community: new ObjectId("6138ef0a00895c22c6cd3b68"),
      data: [Object],
      date: 2021-09-09T11:58:34.463Z
    }
  ]

有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-12 06:21:20

您只需要添加一个$group阶段,按照日期对比赛进行分组,如下所示:

代码语言:javascript
运行
复制
db.collection.aggregate([
  {
    $lookup: {
      from: "community_stats",
      as: "stats",
      let: {
        id: "$_id"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$community",
                "$$id"
              ]
            }
          }
        },
        {
          $group: {
            _id: {
              year: {
                "$year": "$date"
              },
              month: {
                "$month": "$date"
              },
              day: {
                "$dayOfMonth": "$date"
              },
              
            },
            first: {
              $first: "$$ROOT"
            }
          }
        },
        {
          "$replaceRoot": {
            "newRoot": "$first"
          }
        },
        {
          $sort: {
            date: -1
          }
        },
        {
          $limit: 5
        }
      ]
    }
  }
])

Mongo Playground

在我的示例中,使用$first从每天选择第一个文档,但是,如果需要更改,则可以使用不同的操作符/逻辑。

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

https://stackoverflow.com/questions/69148260

复制
相关文章

相似问题

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