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脚本实现分析dns日志并对受访域名排行
Sep 18 Python
python 网络爬虫初级实现代码
Feb 27 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
django的登录注册系统的示例代码
May 14 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
django框架ModelForm组件用法详解
Dec 11 Python
Python安装whl文件过程图解
Feb 18 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
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
js几个验证函数代码
2010/03/25 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
js初始化验证实例详解
2016/11/26 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python Tensor和Array对比分析
2020/01/08 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
GWT的应用有哪两种部署模式
2012/12/21 面试题
2013年军训通讯稿
2014/02/05 职场文书
数控专业自荐书范文
2014/03/16 职场文书
学校评语大全
2014/05/06 职场文书
书法大赛策划方案
2014/06/04 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
个人职业及收入证明
2014/10/13 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
幼师自荐信范文
2015/03/06 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js