Python MongoDB 插入資料時已存在則不執行,不存在則插入的解決方法
阿新 • • 發佈:2020-01-09
本文例項講述了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","title" : "《My Test》" }
加入不同 ID 的日誌:
> db.Blog.update({"_id":"123"},{upsert:true}) WriteResult({ "nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : "123" }) > > db.Blog.find() { "_id" : "123456","title" : "《My Test》" { "_id" : "123","blog_cont" : "abc123","other" : "hello world!" }
如果某些內容想更新的話(例如更新 title )可以用 ‘$set':
> db.Blog.update({"_id":"123456"},"other":"hello world!"},$set:{"title":"《New Title》"}},"nModified" : 1 }) > > db.Blog.find() { "_id" : "123456","title" : "《New Title》 { "_id" : "123","other" : "hello world!" }
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python常見資料庫操作技巧彙總》、《Python數學運算技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。