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:最高状态日期
    2019-08-22
    (状态:a)
  • 咖啡:最高状态日期
    2019-12-31
    (状态:b)
有什么想法吗

db.collection.find().sort({"status.date":-1})
从:

对于数组,小于比较或升序排序比较数组中的最小元素,大于比较或降序排序比较数组中的最大元素


要在数组中获得包含repect To max date的排序元素,您需要从数组中提取最大日期,这可以很容易地使用操作符完成

db.collection.aggregate([
  { "$addFields": {
    "sortDate": { "$max": "$status.date" }
  }},
  { "$sort": { "sortDate": 1 }}
])

我看不出数组在这里有什么用处。创建具有名称索引的平面文档。这提供了基于最大值的升序/降序排序。如果您希望以降序排列,并使用最大日期,则Alex answer将适用于您。否则你可以用这个。