MongoDB group by 后按数组日期排序

MongoDB Sort by array date after group by

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

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

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

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

  1. $match - 按条件过滤文档。
  2. $sort - 按 created_at.
  3. 对文档进行排序
  4. $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' }
  }
}
])