MongoDb-按数组字段的最高值元素排序

时间:2019-07-12 14:15:28

标签: arrays mongodb sorting aggregation-framework

我有一个包含如下文档的集合,我想根据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)

有什么想法吗?

2 个答案:

答案 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 }}
])