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实现的一个火车票转让信息采集器
Jul 09 Python
python进程管理工具supervisor使用实例
Sep 17 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
Django实现简单分页功能的方法详解
Dec 05 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Python hashlib模块用法实例分析
Jun 12 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
如何使用Python进行PDF图片识别OCR
Jan 22 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基础学习小结
2011/04/17 PHP
php中adodbzip类实例
2014/12/08 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
pyenv命令管理多个Python版本
2017/03/26 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python 多维List创建的问题小结
2019/01/18 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
餐饮业员工工作决心书
2014/03/11 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
公司会议策划方案
2014/05/17 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
环卫工人节活动总结
2014/08/29 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
Java版 单机五子棋
2022/05/04 Java/Android