Python MongoDB 插入数据,已存在则不执行,不存在则插入
来源:互联网 发布:怎么把源码变成软件app 编辑:程序博客网 时间:2024/06/05 08:13
前言:
想把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)
0 0
- Python MongoDB 插入数据,已存在则不执行,不存在则插入
- Python MongoDB 插入数据,已存在则不执行,不存在则插入
- Mysql 插入 存在不插入,不存在插入
- Mysql 如果数据存在则更新,不存在则插入
- sqlserver 判断当前数据是否存在 不存在则插入
- mysql 批量插入,存在则不插入该条数据
- MySQL不重复插入,记录不存在则插入,存在则更新
- 关于MongoDB中如何做到对已有数据插入时更新字段,不存在时则插入新的Document
- key存在则更新,不存在则插入
- Oracle存在则修改,不存在插入记录
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- MySql insert:当通过条件查询结果存在该条数据则不插入,否则执行insert
- mongodb 当数据存在时更新数据,数据不存在时插入数据
- MySQL数据表中记录不存在则插入,存在则更新/不操作
- sql插入数据已经存在,则执行update更新
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- MySQL插入数据时,如果记录不存在则insert,如果存在则update
- MySQL插入数据时,如果记录不存在则insert,如果存在则update
- iOS 数组与字符串的转化(有分隔符)
- androd frame动画效果(转载)
- 【浅墨Unity3D Shader编程】之十 深入理解Unity5中的Standard Shader(二)&屏幕油画特效的实现
- 公司往来邮件发送礼仪
- Java与C/C++比较——对象引用方面
- Python MongoDB 插入数据,已存在则不执行,不存在则插入
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
- Python程序员必知必会的开发者工具
- java.lang.ClassNotFoundException: filter.FiltrateRequestParamterFilter
- 值得推荐的C/C++框架和库 (真的很强大)
- JUnit4 详解
- Kd-Tree算法原理和开源实现代码
- python实现KNN的一些问题
- 深入理解JavaScript-replace