标签: 判断文档是否存在

  • pymongo中find_one和find的效率

    在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})