Mongoose根据嵌套数组最后一个元素中的字段进行排序


[{
_id: '1',
logs: [
{
createdAt: "2021-04-01",
},
{
createdAt: "2021-04-02",
},
],
},{
_id: '2',
logs: [
{
createdAt: "2021-04-03",
},
{
createdAt: "2021-04-04",
},
],
}]

我想按降序按logs最后一个元素的createdAt进行排序。在本例中,由于2021-04-022021-04-04"小",因此项目_id:2应为第一个,项目_id:1应为第二个。

我试过'logs[logs.length - 1].createdAt': -1'logs.createdAt': -1,但它们不起作用。

要获得相对于每个数组中最后一个条目的排序对象,

  • 您需要从数组中获取最后一个日期,这可以使用$last运算符完成
  • 接下来,我将在一个新的字段名称sortField中添加一个具有最后一个createdAt条目的字段
  • 我将根据sortField对其进行排序
  • 我将取消设置sortField

我知道有更好的方法可以做到这一点,但它应该暂时完成任务。

db.collection.aggregate([
{
"$addFields": {
"sortField": {
"$last": "$logs.createdAt"
}
}
},
{
$sort: {
"sortField": -1
}
},
{
$unset: "sortField"
}
])

最新更新