我有一个包含如下文档的集合,我想根据date
数组中包含的最高status
值对文档进行排序:
[{
"_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"
}
]
}]
因此,在示例中,用于排序的值应类似于:
2019-08-22
(状态:a) 2019-12-31
(状态:b) 有什么想法吗?
答案 0 :(得分:2)
from operator import itemgetter
for key, count in sorted(c.items(), key=itemgetter(1), reverse=True):
print(count, key)
来自docs:
对于数组,小于比较或升序排序比较数组的最小元素,大于大于比较或降序排序比较数组的最大元素< / strong>。
答案 1 :(得分:0)
要获得与数组中最大日期有关的排序元素,您需要从数组中提取最大日期,您可以使用$max
运算符轻松地完成此操作。
db.collection.aggregate([
{ "$addFields": {
"sortDate": { "$max": "$status.date" }
}},
{ "$sort": { "sortDate": 1 }}
])