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 文件和路径操作函数小结
Nov 23 Python
python读取注册表中值的方法
Apr 08 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
妙用itchat! python实现久坐提醒功能
Nov 25 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python 创建守护进程的示例
Sep 29 Python
Pandas之缺失数据的实现
Jan 06 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 Python
浅谈python数据类型及其操作
May 25 Python
Python中的tkinter库简单案例详解
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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
js 计算图片内点个数的示例代码
2019/04/04 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
Python中正则表达式的详细教程
2015/04/30 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
深入浅出学习python装饰器
2017/09/29 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Selenium的使用详解
2018/10/19 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python requests证书问题解决
2019/09/05 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
请说出几个常用的异常类
2013/01/08 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
测绘工程本科生求职信
2013/10/10 职场文书
个人求职简历的自我评价
2013/10/19 职场文书
高一历史教学反思
2014/01/13 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
《开国大典》教学反思
2016/02/16 职场文书
检举信的写法
2019/04/10 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python