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!" }
希望對你有所幫助!
轉載請註明出處,謝謝!(原文連結:http://blog.csdn.net/Bone_ACE/article/details/50696477)
相關文章
- 教你Mysql如何實現不存在則插入,存在則更新MySql
- MySQL INSERT插入條件判斷:如果不存在則插入MySql
- mysql 存在該記錄則更新,不存在則插入記錄的sqlMySql
- Oracle存在修改,不存在插入記錄Oracle
- mongodb 插入資料MongoDB
- MFC下判斷資料夾是否存在,如不存在則建立資料夾
- mongodb資料庫中插入資料MongoDB資料庫
- MySQL 當記錄不存在時插入,當記錄存在時更新MySql
- mybatis插入資料、批量插入資料MyBatis
- Laravel 批量插入(如果資料存在刪除原資料)Laravel
- 如何插入關聯表資料,或插入資料的時候執行,根據某欄位執行一個函式函式
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- python如何將資料插入資料庫Python資料庫
- MySQL 資料庫表格建立、資料插入及獲取插入的 ID:Python 教程MySql資料庫Python
- MongoDB(7)- 文件插入操作MongoDB
- MongoDB不支援批量插入MongoDB
- python資料插入連線MySQL資料庫PythonMySql資料庫
- 使用 Python 字典向 SQLite 插入資料PythonSQLite
- append插入不能多次未提交插入資料APP
- [Q]如果存在就更新,不存在就插入可以用一個語句實現嗎 zt
- JavaScript到底應不應該加分號?JavaScript自動插入分號規則詳解JavaScript
- oracle批量插入資料Oracle
- [MYSQL -19]插入資料MySql
- MyBatis 批量插入資料MyBatis
- 資料插入問題。
- Oracle 插入大量資料Oracle
- 「python」向DataFrame資料格式中插入行Python
- python連線mysql並插入資料(自用)PythonMySql
- mysql 5.0版本如資料庫已存在則安裝失敗無提示MySql資料庫
- 反射,hashlib模組,正則匹配,冒泡,選擇,插入排序反射排序
- Mysql在資料插入後立即獲取插入的IdMySql
- python 插入日期資料到OraclePythonOracle
- mysql 同時插入幾行不同的資料 。MySql
- MongoDB批量插入大資料文件的簡單方法一例MongoDB大資料
- mysql插入資料時如果有相同資料就不插入或者替換MySql
- 一次性批量插入資料庫時,導致CPU使用率突然很高,無法成功執行插入資料庫
- C++ Vector資料插入C++
- 每秒迴圈插入資料