按时间戳降序排序MongoDB文档

17 投票
2 回答
48927 浏览
提问于 2025-04-18 11:40

我在mongodb里有一堆文档,每个文档都有一个时间戳字段,时间戳的格式是“1404008160”。我想把这些文档按时间戳降序排列。我是这样做的:

sort = [('timestamp', DESCENDING)]
collection.find(limit=10).sort(sort)

但是,我发现结果并没有按时间戳降序排列。我在想,可能是因为时间戳被当作整数来处理。有没有办法在不改变时间戳字段数据类型的情况下解决这个问题?因为我已经在这个集合里有很多数据,不想麻烦地去导入导出什么的。

另外,我希望把排序的负担放在mongodb上,而不是在python里编程去做。

为了更清楚:这个时间戳并不表示文档创建的时间,它是以字符串的形式存储的(例如“1404217646”)。

提前谢谢你。

2 个回答

14

你可以通过使用 sort( { 'timestamp': -1 } ) 来将你的数据按时间从新到旧排序。你的查询语句看起来会像这样:

collection.find().sort( { 'timestamp': -1 } ).limit(10)

如果你对SQL有一些了解,可以在下面的链接中对比这两种查询方式:

http://docs.mongodb.org/manual/reference/sql-comparison/

40

假设你的时间戳是用来表示文档创建的时间,你可以直接使用 _id 来代替

在MongoDB中,_id 的ObjectId会存储你的时间戳。你可以试试下面的代码:

sort = {'_id': -1}
collection.find({}, limit=10).sort(sort)

如果你还是想按照你自定义的 timestamp 字段来排序,可以使用下面的代码:

sort = {'timestamp': -1}
collection.find({}, limit=10).sort(sort)

需要注意的是,这里假设你所有的 timestamp 字段都是同一种类型(比如 stringint

撰写回答