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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
Python实现发送QQ邮件的封装
Jul 14 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
python中open函数的基本用法示例
Sep 07 Python
浅析PEP572: 海象运算符
Oct 15 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
Python super()函数使用及多重继承
May 06 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中的array数组类型分析说明
2010/07/27 PHP
php短址转换实现方法
2015/02/25 PHP
php计算title标题相似比的方法
2015/07/29 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
详解python如何引用包package
2020/06/07 Python
序列化Python对象的方法
2020/08/01 Python
python不同版本的_new_不同点总结
2020/12/09 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
甜品店创业计划书
2014/09/21 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS