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错误处理详解
Sep 28 Python
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
python如何实现异步调用函数执行
Jul 08 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
对django 模型 unique together的示例讲解
Aug 06 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
python构造IP报文实例
May 05 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python飞机大战游戏实例讲解
Dec 04 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
使用PHP开发留言板功能
2019/11/19 PHP
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
React diff算法的实现示例
2018/04/20 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Python中防止sql注入的方法详解
2017/02/25 Python
Python清空文件并替换内容的实例
2018/10/22 Python
在Python中使用Neo4j的方法
2019/03/14 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
竞选班长的演讲稿
2014/04/24 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
个人求职自荐信范文
2014/06/20 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
监考失职检讨书
2015/01/26 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
小学教师岗位职责
2015/04/02 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS