Python MongoDB 插入數(shù)據(jù)時(shí)已存在則不執(zhí)行,不存在則插入的解決方法
本文實(shí)例講述了Python MongoDB 插入數(shù)據(jù)時(shí)已存在則不執(zhí)行,不存在則插入的解決方法。分享給大家供大家參考,具體如下:
前言:
想把QQ日志爬蟲(Python)爬下來的日志保存到 MongoDB 里面。
但 insert 的時(shí)候報(bào)錯(cuò):
E11000 duplicate key error collection: QQ.Blog index: _id_ dup key: { : "965464518_1301232446" }
后來知道錯(cuò)誤的原因是:插入的數(shù)據(jù)和已有數(shù)據(jù)的 ID 重復(fù)了。
我想要的是:插入一篇日志,如果該日志(ID)已存在,則不執(zhí)行(也不更新);如果不存在則插入。
百度中大部分的答案都是用更新,但如果 ID 存在的話我是想直接不執(zhí)行的,沒有更新已有數(shù)據(jù)的必要。
解決方案:
update里有個(gè)參數(shù) ‘$setOnInsert' 可以實(shí)現(xiàn)”存在則不執(zhí)行”的功能,可見 $setOnInsert 官方文檔。
示例:
起始數(shù)據(jù):
> 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!" }
如果某些內(nèi)容想更新的話(例如更新 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!" }
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Vs Code中8個(gè)好用的python 擴(kuò)展插件
這篇文章主要介紹了Vs Code中8個(gè)好用的python 擴(kuò)展插件,幫助大家更好的利用vs code進(jìn)行python開發(fā),感興趣的朋友可以了解下2020-10-10
解決Python設(shè)置函數(shù)調(diào)用超時(shí),進(jìn)程卡住的問題
今天小編就為大家分享一篇解決Python設(shè)置函數(shù)調(diào)用超時(shí),進(jìn)程卡住的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
賺瘋了!轉(zhuǎn)手立賺800+?大佬的python「搶茅臺(tái)腳本」使用教程
這篇文章主要介紹了如果利用python搶購京東茅臺(tái),幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01
詳解python3中用HTMLTestRunner.py報(bào)ImportError: No module named ''
這篇文章主要介紹了詳解python3中用HTMLTestRunner.py報(bào)ImportError: No module named 'StringIO'如何解決,感興趣的可以了解一下2019-08-08
對(duì)Python 窗體(tkinter)樹狀數(shù)據(jù)(Treeview)詳解
今天小編就為大家分享一篇對(duì)Python 窗體(tkinter)樹狀數(shù)據(jù)(Treeview)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10

