Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法


Posted in Python onSeptember 24, 2019

本文实例讲述了Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法。分享给大家供大家参考,具体如下:

前言:

想把QQ日志爬虫(Python)爬下来的日志保存到 MongoDB 里面。

但 insert 的时候报错:

E11000 duplicate key error collection: QQ.Blog index: _id_ dup key: { : "965464518_1301232446" }

后来知道错误的原因是:插入的数据和已有数据的 ID 重复了。

我想要的是:插入一篇日志,如果该日志(ID)已存在,则不执行(也不更新);如果不存在则插入。

百度中大部分的答案都是用更新,但如果 ID 存在的话我是想直接不执行的,没有更新已有数据的必要。

解决方案:

update里有个参数 ‘$setOnInsert' 可以实现”存在则不执行”的功能,可见 $setOnInsert 官方文档。

示例:

起始数据:

> db.Blog.insert({"_id":"123456", "blog_cont":"abcdef", "title":"《My Test》"})
> db.Blog.find()
{ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }

加入相同 ID 的日志:

> db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
>
> db.Blog.find()
{ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }

加入不同 ID 的日志:

> db.Blog.update({"_id":"123"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "123" })
>
> db.Blog.find()
{ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》"
{ "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }

如果某些内容想更新的话(例如更新 title )可以用 ‘$set':

> db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}, $set:{"title":"《New Title》"}}, {upsert:true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> db.Blog.find()
{ "_id" : "123456", "blog_cont" : "abcdef", "title" : "《New Title》
{ "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
python链接Oracle数据库的方法
Jun 28 Python
Python中的字符串查找操作方法总结
Jun 27 Python
python append、extend与insert的区别
Oct 13 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
python怎么提高计算速度
Jun 11 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
Python获取时间戳代码实例
Sep 24 #Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 #Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 #Python
python实现的config文件读写功能示例
Sep 24 #Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 #Python
pymysql 开启调试模式的实现
Sep 24 #Python
django2.2安装错误最全的解决方案(小结)
Sep 24 #Python
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
php curl 上传文件代码实例
2015/04/27 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
python中如何使用insert函数
2020/01/09 Python
谈谈python垃圾回收机制
2020/09/27 Python
用python写PDF转换器的实现
2020/10/29 Python
JAVA中的关键字有什么特点
2014/03/07 面试题
高三地理教学反思
2014/01/11 职场文书
大学校庆邀请函
2014/01/11 职场文书
班级团队活动方案
2014/08/14 职场文书
新党章心得体会
2014/09/04 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
施工安全保证书
2015/05/09 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python