索引会使 find_one() 更快吗?

Will indexing make find_one() any faster?

如果我有一个 pymongo 查询,在一个包含大约 4000 个文档的集合中,如下所示:

mong  =  pymongo.Connection()['ASD_2']['APS2'] 
py_mong = mong.find_one({'plate':'123456'})

考虑到 find_one() 不允许 .explain()["cursor"].explain()["nscanned"],因此手头没有方法可以查明扫描的性质,谁能告诉我这是否值得当我只打算使用 find_one() 时索引集合?

是的,索引将避免对所请求的板进行线性搜索并以对数时间工作(快得多)。

是的,绝对。

我怎么知道?

首先,如果没有,那将是完全不能接受的。人们会抱怨 find_onefind 相比令人惊讶和不必要的缓慢,而开发团队会修复它(否则可能会被视为愚蠢)。

其次,我检查了代码。该实现正是您所期望的,这意味着 find_one 只是 find:

的包装器
def find_one(self, spec_or_id=None, *args, **kwargs):
    if spec_or_id is not None and not isinstance(spec_or_id, dict):
        spec_or_id = {"_id": spec_or_id}
    for result in self.find(spec_or_id, *args, **kwargs).limit(-1):
        return result
    return None

(pymongo 版本 2.4.2)