如果从索引中检索数据,MongoDB查询是否需要显式sort()调用?



我正在构建一个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()不仅可以保护您的代码免受意外(即不一致的值等(的影响,还可以使代码可读。

您可能还对使用索引对查询结果进行排序感兴趣

最新更新