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入门教程之运算符与控制流
Aug 17 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
对pandas replace函数的使用方法小结
May 18 Python
Python命令行click参数用法解析
Dec 19 Python
python使用配置文件过程详解
Dec 28 Python
Python生成器常见问题及解决方案
Mar 21 Python
python如何调用字典的key
May 25 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
浅析Python中的随机采样和概率分布
Dec 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
单位速度在实战中的运用
2020/03/04 星际争霸
PHP如何利用P3P实现跨域
2013/08/24 PHP
php操作xml
2013/10/27 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
Javascript开发包大全整理
2006/12/22 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python批量修改交换机密码的示例
2020/09/22 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
应用电子专业学生的自我评价
2013/10/16 职场文书
测试工程师岗位职责
2013/11/28 职场文书
关于保护环境的建议书
2014/05/13 职场文书
学校志愿者活动总结
2014/06/27 职场文书
市场总监岗位职责
2015/02/11 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
Pandas数据类型之category的用法
2021/06/28 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python