pymongo中find_one和find的效率

在Mongodb中,如果想检查一个文档是否存在,最高效的方法应该是使用find()+count(),而不是使用find_one()。

在Mongodb中,如果想检查一个文档是否存在,最高效的方法应该是使用find()+count(),而不是使用find_one()。

一般来说,我们第一感觉会认为find_one()最高效,但是find_one()每次查找会同时读取文档,这相比find()返回一个cursor,会慢不少。

David Mytton,在《Checking if a document exists – MongoDB slow findOne vs find》 (2013),指出了这个区别。

在我目前使用的pymongo 3.7.2中,无法像其文中所述,使用limit()判断返回的cursor是否存在,而需要count()判断返回的cursor是否包含文档。

因此,使用

db.collection.find({"username":"abc"}).count()
db.collection.find({"username":{"$in":usernames}).count() # 如果usernames是一个列表

来替代:

db.collection.find_one({_id: "myId"}, {_id: 1})

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.