python 往MongoDB数据库中插入数据,经常会遇到的一个需求就是,对插入的数据进行去重。
最笨的方法呢,就是先把所有的数据插入数据库里,再去除掉多余重复的数据。具体操作呢,繁琐,复杂,效率低,还总容易出现莫名其妙的bug。
最理想的插入方法就是,如果数据库不存在,则插入数据;如果数据已经存在了,就不插入数据,或者更新数据。
使用insert方法,目前还没发现什么去重的好用处。 能够更新数据库的就是update()方法了。
update()方法需要两个参数,fileter,document, fileter 是更新条件, document是更新的内容。
要实现如果不存在就插入,如果存在就不插入的要求,我们需要用到 update的一个参数:‘$setOnInsert’
具体的操作方法可以参考九茶大神的这篇博客: https://blog.csdn.net/Bone_ACE/article/details/50696477
详细介绍了 $setOnInsert 方法的使用规则。
唯一不足的是,这里只有命令行模式下的规则,现在我们需要的是在python和MongoDB交互过程中使用$setOnInsert参数。
这个就是我们接下来的重点了。
python与MongoDB的交互方法和命令行下的MongoDB命令 差不了多少,原理相同,就是具体的方法可能有些差异。
update方法的源码具体如下:
$setOnInsert官方文档的介绍如下:
通过阅读官方文档我们可以发现 与$setOnInsert方法想配合的最重要的参数就是 upsert:True。
update源码中的upsert参数默认为False,只需要将update方法的upsert参数修改为True是否就能达到需要的效果呢?
开始时MongoDB数据库为空,执行update方法以后,数据库存在我们插入的标签数据,多次执行update方法,数据库的标签数据也不会增加。
理论上来说,update() 能够使用的 $setOnInsert 方法, update_many() 批量修改MongoDB也能够修改, update_many()函数中同样存在upsert参数。
具体实验却是失败的。
如果有哪位小伙伴知道update_many() 的使用方法,麻烦留言交流一下,万分感谢。