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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Django的session中对于用户验证的支持
Jul 23 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python语音识别实践之百度语音API
Aug 30 Python
Python中垃圾回收和del语句详解
Nov 15 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
理解python中装饰器的作用
Jul 21 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
SONY SRF-M100的电路分析
2021/03/02 无线电
一个oracle+PHP的查询的例子
2006/10/09 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS option location 页面跳转实现代码
2008/12/27 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
JS表的模拟方法
2015/02/05 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python面向对象特殊成员
2017/04/24 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python应用文件读取与登录注册功能
2019/09/23 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
企业后勤岗位职责
2014/02/28 职场文书
学生会竞聘书范文
2014/03/31 职场文书
双拥工作宣传标语
2014/06/26 职场文书
意向书范本
2014/07/29 职场文书
人事任命通知书
2015/04/21 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书