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制作钉钉加密/解密工具
Dec 07 Python
python生成lmdb格式的文件实例
Nov 08 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
python地震数据可视化详解
Jun 18 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
Python collections模块使用方法详解
Aug 28 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
pytorch 自定义参数不更新方式
Jan 06 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
分享7个 Python 实战项目练习
Mar 03 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者的疑难问答(1)
2006/10/09 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
删除select中所有option选项jquery代码
2013/08/12 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
python 中文字符串的处理实现代码
2009/10/25 Python
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python简单分割文件的方法
2015/07/30 Python
详解python基础之while循环及if判断
2017/08/24 Python
使用python画社交网络图实例代码
2019/07/10 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
python实现双人五子棋(终端版)
2020/12/30 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
销售业务员岗位职责
2014/01/29 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
优秀班组长事迹
2014/05/31 职场文书
学校安全防火方案
2014/06/07 职场文书
中国梦团日活动总结
2014/07/07 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
质量保证书
2015/01/17 职场文书
家长会主持词开场白
2015/05/29 职场文书
捐款仪式主持词
2015/07/04 职场文书
红领巾广播站广播稿
2015/08/19 职场文书