[{
_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-02
比2021-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"
}
])