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中MYSQLdb出现乱码的解决方法
Oct 11 Python
Python中if __name__ == "__main__"详细解释
Oct 21 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
Python基础之元组与文件知识总结
May 19 Python
总结几个非常实用的Python库
Jun 26 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
微信扫描二维码登录网站代码示例
2013/12/30 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JavaScript高级程序设计
2006/12/29 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue实现文件上传功能
2018/08/13 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python 爬虫图片简单实现
2017/06/01 Python
python实现聚类算法原理
2018/02/12 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
财务会计专业毕业生自荐信
2013/10/02 职场文书
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
大学生军训自我评价分享
2013/11/09 职场文书
心理健康课教学反思
2014/02/13 职场文书
会计专业求职信范文
2014/03/16 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
审美与表现自我评价
2015/03/09 职场文书
感恩主题班会教案
2015/08/12 职场文书
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS