【发布时间】:2014-08-21 12:16:03
【问题描述】:
我在 mongodb 中有一堆文档,并且都有一个时间戳字段,时间戳存储为“1404008160”。我想按 desc 顺序对该集合中的所有文档进行排序。我这样做:
sort = [('timestamp', DESCENDING)]
collection.find(limit=10).sort(sort)
但是,我没有得到按时间戳按 desc 顺序排序的结果。我认为这是因为时间戳被视为一个 int 字段。在不更改时间戳字段的数据类型的情况下是否可以解决此问题。我已经在这个集合中有很多数据,所以不想经历导入/导出等的麻烦。
另外 - 我想保持负载排序到 mongodb,而不是在 python 中以编程方式进行。
需要说明的是:时间戳不表示文档的创建时间,它以字符串形式存储(例如“1404217646”)。
提前致谢。
【问题讨论】:
-
我假设您已经导入了原本会表示为
pymongo.DESCENDING的常量。但实际上,这只是-1的常量,以使阅读更容易。作为int应该无关紧要,因为值应该以这种方式排序。可能这些实际上是字符串?意思是,当您查看 shell 中的数据时,这些引号""会出现吗? -
是的 - 引号确实出现了 - 所以时间戳存储为字符串.. 我正在寻找一种解决方法,而不在所有现有文档中更改此字段的数据类型
-
确实没有解决方法。即使作为字符串,这仍然应该正确排序,因为值是词法的。当然,除非有些是数字,有些是字符串,否则会导致问题。如果您正在为 MongoDB 寻找一种“转换”值的方法,那么除了字符串黑客之外,这不会发生,但这不会有效。你真的需要改变类型。最好的形式是作为 BSON 日期,它只是在内部存储时间戳值,但会在您的程序中自动转换为日期。
-
好吧 - 我最终重建了所有文档