Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法

作者:九茶 时间:2022-11-16 20:48:41 

本文实例讲述了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程序设计有所帮助。

来源:https://blog.csdn.net/Bone_ACE/article/details/50696477

标签:Python,MongoDB,插入数据
0
投稿

猜你喜欢

  • SQLServer地址搜索性能优化

    2024-01-14 10:48:42
  • 对Python 两大环境管理神器 pyenv 和 virtualenv详解

    2022-05-02 11:27:40
  • PHP如何从txt文件中读取数据详解

    2023-11-15 02:37:32
  • python实现根据月份和日期得到星座的方法

    2023-02-02 01:05:51
  • 利用WSH获取计算机硬件信息、DNS信息等

    2008-05-05 13:04:00
  • 基于Python实现批量缩放图片(视频)尺寸

    2021-03-23 12:21:22
  • python 变量初始化空列表的例子

    2022-09-03 08:14:42
  • Python性能测试工具Locust安装及使用

    2021-08-17 23:22:56
  • Vue状态管理库Pinia详细介绍

    2024-05-09 15:11:43
  • python实现桌面托盘气泡提示

    2023-05-16 21:27:15
  • asp中获取当前页面的地址与参数的函数代码

    2011-02-20 10:37:00
  • 主流浏览器性能比较

    2009-10-19 14:34:00
  • MySQL和SQLServer的比较

    2024-01-15 00:30:39
  • 存储过程优缺点分析

    2024-01-22 09:41:14
  • 数据库之:Mysql数据库服务器安装与配置

    2010-08-31 14:11:00
  • linux系统oracle数据库出现ora12505问题的解决方法

    2024-01-27 09:06:15
  • JS实现跟随鼠标闪烁转动色块的方法

    2024-04-16 09:05:21
  • 详解微信小程序之提高应用速度小技巧

    2024-04-22 22:17:57
  • Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结

    2024-05-09 14:56:40
  • jQuery Ajax全解析

    2024-04-09 19:45:00
  • asp之家 网络编程 m.aspxhome.com