Mongodb $按创建和更新日期排序。 (哪一个是最新的)

标签 mongodb sorting mongodb-query

我知道如何使用 MongoDB 对文档进行排序。但我想对多个日期属性的文档进行排序,例如按创建日期和更新日期排序,哪个日期是最新的。例如,文档是新创建的或最近更新的,它应该排在第一位。

这是我的文档示例。

{
    "_id" : ObjectId("5720b6f0bb700f8839fc6972"),
    "name" : "Tov Kosher Kitchen",
    "restaurant_id" : "40356068",
    "createdAt" : ISODate("2016-05-05T07:02:13.137Z"),
    "updatedAt" : ISODate("2016-05-05T07:02:58.033Z")
}

更新:createdAt 和updatedAt 是示例属性。两者都可以彼此独立地更改。

最佳答案

您可以通过 $project 阶段使用 aggregate 来完成此操作,该阶段添加一个字段(两个时间戳中较大的一个),然后对其进行排序:

db.test.aggregate([
    {$project: {
        // Include the original doc
        doc: '$$ROOT',
        // Add a 'latest' field that contains the greater of createdAt and updateAt
        latest: {$cond: {
            if: {$gt: ['$createdAt', '$updatedAt']},
            then: '$createdAt',
            else: '$updatedAt'
        }}
    }},
    {$sort: {latest: -1}}
])

关于Mongodb $按创建和更新日期排序。 (哪一个是最新的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319461/

相关文章:

java - 在 Java MongoDb 中,如何将特定字段的值保存在 ArrayList 中?

javascript - 如何将某些对象键分离到它们自己的数组中?

Django 管理员 : how to sort by one of the custom list_display fields that has no database field

php - 按销售对产品进行排序 - woocommerce

python - 无法将命令的输出重定向到输出文件

javascript - 前一个查询的 meteor 返回名称

r - 如何获取 data.table 中每个(选定)列的前 k 值的索引

mongodb - $concat mongodb 中的两个字段

mongodb查询不使用索引

mongodb - 在 MongoDB 表达式中使用 $exists