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 相关文章推荐
python 内置函数filter
Jun 01 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
python使用response.read()接收json数据的实例
Dec 19 Python
PyQt5固定窗口大小的方法
Jun 18 Python
python psutil模块使用方法解析
Aug 01 Python
Python os模块常用方法和属性总结
Feb 20 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Python工程师必考的6个经典面试题
Jun 28 Python
Python基于pillow库实现生成图片水印
Sep 14 Python
分享几种python 变量合并方法
Mar 20 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
PHP分页详细讲解(有实例)
2013/10/30 PHP
php实现可运算的验证码
2015/11/10 PHP
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
vue中v-model的应用及使用详解
2018/06/27 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
Python中下划线的使用方法
2015/03/27 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
如何用python处理excel表格
2020/06/09 Python
python和php哪个容易学
2020/06/19 Python
python与idea的集成的实现
2020/11/20 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
安全生产责任书
2014/03/12 职场文书
大型演出策划方案
2014/05/28 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
欢迎词范文
2015/01/27 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
话题作文之学会尊重
2019/12/16 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
Python Matplotlib库实现画局部图
2021/11/17 Python