Ubuntu下MongoDB版本的升级

MongoDB从3.4到3.6到4.0的升级,是一个逐步完成的过程,需要运行每个版本的服务器程序做调整。下面给出的是一个逐步升级的方案,同时给出了各个版本的阿里云源,方便国内使用。

使用MongoDB好几年,服务器版本自最后一次升级一直停留在3.4版本。MongoDB版本已经出了3.6和4.0两个版本。这次服务器版本升级到Ubuntu 18.04,顺便就把MongDB也升级一下。

MongoDB从3.4到3.6到4.0的升级,是一个逐步完成的过程,需要每个版本的服务器程序运行做调整。下面给出的是一个逐步升级的方案,已经对应的阿里云源,方便国内使用

Continue reading “Ubuntu下MongoDB版本的升级”

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