Arrays MongoDb-按数组字段的最大值元素排序
我有一个包含如下文档的集合,我想根据它们在Arrays MongoDb-按数组字段的最大值元素排序,arrays,mongodb,sorting,aggregation-framework,Arrays,Mongodb,Sorting,Aggregation Framework,我有一个包含如下文档的集合,我想根据它们在状态数组中包含的最高日期值对文档进行排序: [{ "_id": "1", "name": "Tea", "status": [ { "state": "a", "date": "2019-08-22" }, { "state": "b", "date": "2019-07-12" }, ], "_id": "2", "name": "Coffee",
状态
数组中包含的最高日期
值对文档进行排序:
[{
"_id": "1",
"name": "Tea",
"status": [
{
"state": "a",
"date": "2019-08-22"
},
{
"state": "b",
"date": "2019-07-12"
},
],
"_id": "2",
"name": "Coffee",
"status": [
{
"state": "c",
"date": "2019-05-01"
},
{
"state": "b",
"date": "2019-12-31"
}
]
}]
因此,在本例中,用于排序的值应如下所示:
- Tea:最高状态日期
(状态:a)2019-08-22
- 咖啡:最高状态日期
(状态:b)2019-12-31
db.collection.find().sort({"status.date":-1})
从:
对于数组,小于比较或升序排序比较数组中的最小元素,大于比较或降序排序比较数组中的最大元素
要在数组中获得包含repect To max date的排序元素,您需要从数组中提取最大日期,这可以很容易地使用操作符完成
db.collection.aggregate([
{ "$addFields": {
"sortDate": { "$max": "$status.date" }
}},
{ "$sort": { "sortDate": 1 }}
])
我看不出数组在这里有什么用处。创建具有名称索引的平面文档。这提供了基于最大值的升序/降序排序。如果您希望以降序排列,并使用最大日期,则Alex answer将适用于您。否则你可以用这个。