【问题标题】:Mongoose - aggregate and group dates for filteringMongoose - 聚合和分组日期以进行过滤
【发布时间】:2020-12-24 05:25:57
【问题描述】:

我在 mongoose 上进行数据聚合时遇到了一些问题。不胜感激。

这是我的数据库(最小化):

    {
        _id: 1,
        timestamp: 2018-05-27T22:02:07.837+00:00,
   },
   {
        _id: 2,
        timestamp: 2019-10-27T22:02:07.837+00:00,
    },
    {
        _id: 3,
        timestamp: 2019-12-27T22:02:07.837+00:00,
    },
    {
        _id: 4,
        timestamp: 2020-01-27T22:02:07.837+00:00,
    },
    {
        _id: 5,
        timestamp: 2020-02-27T22:02:07.837+00:00,
    },
    {
        _id: 6,
        timestamp: 2020-09-27T22:02:07.837+00:00,
    }

这是我的目标结构:

   [
      [2018,5],
      [2019,10],
      [2019,12],
      [2020,1],
      [2020,2],
      [2020,9]
    ]

目前我的代码是:

  Model.aggregate([
    { $group: { _id: "$year", months: { $addToSet: "$month" } } }
  ]);

Mongo Playground

但我觉得我离我想要达到的目标还很远。 不胜感激,谢谢大家!!

【问题讨论】:

  • 这是您需要的吗? mongoplayground.net/p/Xnl1iUSJ3fg
  • @Rfroes87 不完全是。请注意,当您添加新文档时,它们也会被添加。我需要独特的年+月。想象一个存在几年的博客,我想显示一个包含所有独特月份的列表。 5 小时后,我独自想出了一个解决方案,很快就发布了答案。

标签: mongodb date mongoose aggregation


【解决方案1】:

5 小时后,我成功了。 解决方案: https://mongoplayground.net/p/gFpFiK8vjkk

db.collection.aggregate([
          { $group: { _id: { year: { $year: "$timestamp" }, month: { $month: "$timestamp" } }, total: { $sum: 1 } } },
          { $sort: { "_id.year": -1, "_id.month": -1 } },
  
])

【讨论】:

  • 你不需要$unwind(它与数组一起使用)。您可以将排序用作聚合管道的第二阶段:{ $sort: { "_id.year": -1, "_id.month": -1 } }。而且,您不需要第三和第四阶段。
  • @prasad_ 你说得对,我会更新答案。谢谢你!它在那里是因为我最初想获得不同的数据结构响应,但我放弃了。
猜你喜欢
  • 2016-06-09
  • 2021-10-16
  • 1970-01-01
  • 2017-07-03
  • 2015-06-28
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多