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

时间:2016-05-19 09:42:50

标签: 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是示例属性。两者都可以相互独立地改变。

3 个答案:

答案 0 :(得分:1)

您可以使用aggregate阶段对$project执行此操作,该阶段会添加一个字段,该字段是两个时间戳中较大的一个,然后对其进行排序:

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

答案 1 :(得分:0)

您可以在创建文档时(或设置createdAt日期时)设置“updatedAt”日期和“createdAt”日期。然后你可以按updatedAt排序。

答案 2 :(得分:0)

由于无法通过排序完成此操作,您需要的另一个选项是编写一个脚本,比较每个文档的updatedAt和createdAt,并将新属性写入名为“mostRecentDate”的文档,该文档是updatedAt的最新日期。并创造了。

然后按“mostRecentDate”排序,确保将来的任何写入或更新都会更改此属性和其他日期属性。