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 相关文章推荐
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python实现自动上京东抢手机
Feb 06 Python
python 实现selenium断言和验证的方法
Feb 13 Python
Python3数字求和的实例
Feb 19 Python
Python3+Appium安装使用教程
Jul 05 Python
python 搜索大文件的实例代码
Jul 08 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
Python爬虫教程知识点总结
Oct 19 Python
在python中读取和写入CSV文件详情
Jun 28 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 一元分词算法
2009/11/30 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php文件上传的简单实例
2013/10/19 PHP
js自动下载文件到本地的实现代码
2013/04/28 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python Requests安装与简单运用
2016/04/07 Python
使用python模拟命令行终端的示例
2019/08/13 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
教师演讲稿开场白
2014/08/25 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
vue实现在data里引入相对路径
2022/06/05 Vue.js