我正在构建一个mongo数据库来存储将带有时间戳的数据。我的数据库中的每个文档都有一个时间字段:
{"time":<datetime-object>}
我为time
字段创建了一个索引,如下所示:
self.db.test.create_index([("time", pymongo.ASCENDING)])
并有一个仅从数据库请求时间戳信息的查询:
self.db.test.find({'time':{'$gte':start, '$lte':end}}, {"time":1, "_id":0}).sort([("time", 1)])
我读过其他问题/文档,说使用索引获取文档应该按排序顺序返回文档,因为索引本身已经排序,但我看到的所有示例仍然直接调用sort()
作为查询的一部分。我的问题是,如果我只从数据库中专门请求一个具有索引的字段,我是否需要将sort()
方法作为查询的一部分,还是会按排序顺序返回文档?
如果我专门请求一个我从数据库中索引的字段,我是否需要将 sort(( 方法作为查询的一部分,还是会按排序顺序返回文档?
在具有索引的单个字段的示例案例中,它是涵盖的查询,则返回的顺序将是索引本身的顺序。
但是,在具有多键索引的多键字段的情况下并非如此。这是因为多键索引无法涵盖对数组字段的查询。
建议指定 sort((,因为:
-
如果查询规划器能够使用索引,则会自动放弃排序阶段。另请参阅查询优化和结果解释,了解更多信息。
-
显式指定
sort()
不仅可以保护您的代码免受意外(即不一致的值等(的影响,还可以使代码可读。
您可能还对使用索引对查询结果进行排序感兴趣