Python MongoDB 插入数据,已存在则不执行,不存在则插入
2016-02-19 11:24
666 查看
前言:
想把QQ日志爬虫(Python)爬下来的日志保存到 MongoDB 里面。但 insert 的时候报错:
[code]E11000 duplicate key error collection: QQ.Blog index: _id_ dup key: { : "965464518_1301232446" }
后来知道错误的原因是:插入的数据和已有数据的 ID 重复了。
我想要的是:插入一篇日志,如果该日志(ID)已存在,则不执行(也不更新);如果不存在则插入。
百度中大部分的答案都是用更新,但如果 ID 存在的话我是想直接不执行的,没有更新已有数据的必要。
解决方案:
update里有个参数 ‘$setOnInsert’ 可以实现”存在则不执行”的功能,可见 $setOnInsert 官方文档。示例:
起始数据:[code]> db.Blog.insert({"_id":"123456", "blog_cont":"abcdef", "title":"《My Test》"}) > db.Blog.find() { "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }
加入相同 ID 的日志:
[code]> 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 的日志:
[code]> 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’:
[code]> 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)
相关文章推荐
- window平台安装 MongoDB
- 当以下情况时可选择mongodb取代mysql
- MongoDB的安装
- Mongodb启动命令mongod参数说明
- MongoDB学习笔记(索引)
- MongoDB:索引与性能
- windows下log4j日志存储到mongodb下
- [翻译]mongodb日志分析工具mtools之mplotqueries
- ivqBlog 开源博客 (angularjs + express + mongodb)
- php 操作mongodb
- MongoDB操作
- MongoDB(三)mongoDB下载和安装
- 利用log4j+mongodb实现分布式系统中日志统一管理
- MongoDB从不同角度的分析(顶)
- PHP之mongodb学习
- mongodb 配置项详解
- MongoDB概念解析
- mongodb的使用
- Mongodb嵌套文档的修改-利用数组修改器更新数据
- MongoDB是?