我知道如何使用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是示例属性。两者都可以相互独立地改变。
答案 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”排序,确保将来的任何写入或更新都会更改此属性和其他日期属性。