【问题标题】:MongoDB Sort by array date after group byMongoDB按分组后的数组日期排序
【发布时间】:2022-01-25 20:40:07
【问题描述】:

我试图在时间间隔内对 Orders 数组进行分组,并按日期对它们进行分组,对它们进行排序,并将所有订单分成几天。但是,我也想对每天排序的订单数组进行排序。

Orders.aggregate([{
  $match: {
      'created_at': {
          $gte: timeInterval, //match last 3 days
      }
  }
}, {
  "$group": {
      _id: {
        $dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
      },
      orders: { $push: '$$ROOT' }
  }

}, {
  $sort: { '_id': -1 } // sort by date
}])

const OrderSchema = new Schema({
  ...,
  created_at: {
    type: Date,
    default: Date.now
  },
})


exData=[{_id: 26/12/2021, orders:[...]},{_id: 25/12/2021, orders:[...]}, ]
// need to sort orders array

我试过了:

{
  $sort: { '_id': -1, "orders.created_at": -1 }
}

如果有任何帮助,我将不胜感激。谢谢。

【问题讨论】:

  • $match$sort 日期之后,然后是$group
  • @YongShun 工作谢谢!

标签: node.js mongodb mongoose aggregation-framework


【解决方案1】:

您的聚合管道应如下所示:

  1. $match - 按条件过滤文档。
  2. $sort - 按 created_at 对文档进行排序。
  3. $group - 按created_at 分组并为累积字段添加orders
Orders.aggregate([
{
  $match: {
    'created_at': {
      $gte: timeInterval, //match last 3 days
    }
  }
}, 
{
  $sort: { "created_at": -1 }
},
{
  $group: {
    _id: {
      $dateToString: { format: "%d/%m/%Y", date: "$created_at", timezone: "Australia/Melbourne" } // group by date
    },
    orders: { $push: '$$ROOT' }
  }
}
])

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 2011-02-19
    • 2016-04-10
    • 2016-07-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多