【问题标题】:MongoDb - Sort by highest-value element of array fieldMongoDb - 按数组字段的最高值元素排序
【发布时间】:2019-07-12 14:15:28
【问题描述】:

我有一个包含如下文档的集合,我想根据它们在 status 数组中包含的最高 date 值对文档进行排序:

[{
  "_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)

有什么想法吗?

【问题讨论】:

  • 我在这里看不到数组的用处。创建带有名称索引的平面文档。

标签: arrays mongodb sorting aggregation-framework


【解决方案1】:
db.collection.find().sort({"status.date":-1})

来自docs

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

【讨论】:

    【解决方案2】:

    要获得与数组内最大日期相关的排序元素,您需要从数组中提取最大日期,您可以使用$max 运算符轻松完成。

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

    【讨论】:

    • 这提供了基于最大值的升序/降序排序。
    • 如果您希望按最大日期降序排列,那么 Alex 的回答将为您工作。否则你可以用这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2017-06-08
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多