温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 如何使用Python解决MongoDB插入数据时已存在则不执行,不存在则插入的问题

如何使用Python解决MongoDB插入数据时已存在则不执行,不存在则插入的问题

发布时间:2021-06-30 16:13:55 阅读:158 作者:小新 栏目:开发技术
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要为大家展示了“如何使用Python解决MongoDB插入数据时已存在则不执行,不存在则插入的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用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解决MongoDB插入数据时已存在则不执行,不存在则插入的问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×