按时间戳降序排序MongoDB文档
我在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有一些了解,可以在下面的链接中对比这两种查询方式:
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
字段都是同一种类型(比如 string
或 int
)