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使用metaclass实现Singleton模式的方法
May 05 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
Python中进程和线程的区别详解
Oct 29 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
python实现斗地主分牌洗牌
Jun 22 Python
详解Python中的for循环
Apr 30 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
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python aiohttp的使用详解
2019/06/20 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
军训自我鉴定
2013/12/14 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
班主任班级寄语大全
2014/04/04 职场文书
高中生毕业评语
2014/12/30 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
教师教育心得体会
2016/01/19 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
Ruby处理CSV数据方法详解
2022/04/18 Ruby
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技