Python MongoDB 插入數(shù)據(jù)時已存在則不執(zhí)行,不存在則插入的解決方法
本文實例講述了Python MongoDB 插入數(shù)據(jù)時已存在則不執(zhí)行,不存在則插入的解決方法。分享給大家供大家參考,具體如下:
前言:
想把QQ日志爬蟲(Python)爬下來的日志保存到 MongoDB 里面。
但 insert 的時候報錯:
E11000 duplicate key error collection: QQ.Blog index: _id_ dup key: { : "965464518_1301232446" }
后來知道錯誤的原因是:插入的數(shù)據(jù)和已有數(shù)據(jù)的 ID 重復(fù)了。
我想要的是:插入一篇日志,如果該日志(ID)已存在,則不執(zhí)行(也不更新);如果不存在則插入。
百度中大部分的答案都是用更新,但如果 ID 存在的話我是想直接不執(zhí)行的,沒有更新已有數(shù)據(jù)的必要。
解決方案:
update里有個參數(shù) ‘$setOnInsert' 可以實現(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é)運算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Django models.py應(yīng)用實現(xiàn)過程詳解
這篇文章主要介紹了Django models.py應(yīng)用實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07