经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
来源:jb51  时间:2019/9/25 9:08:20  对本文有异议

本文实例讲述了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 官方文档

示例:

起始数据:

  1. > db.Blog.insert({"_id":"123456", "blog_cont":"abcdef", "title":"《My Test》"})
  2. > db.Blog.find()
  3. { "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }
  4.  

加入相同 ID 的日志:

  1. > db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})
  2. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
  3. >
  4. > db.Blog.find()
  5. { "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》" }
  6.  

加入不同 ID 的日志:

  1. > db.Blog.update({"_id":"123"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}}, {upsert:true})
  2. WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "123" })
  3. >
  4. > db.Blog.find()
  5. { "_id" : "123456", "blog_cont" : "abcdef", "title" : "《My Test》"
  6. { "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }
  7.  

如果某些内容想更新的话(例如更新 title )可以用 ‘$set':

  1. > db.Blog.update({"_id":"123456"}, {$setOnInsert:{"blog_cont":"abc123", "other":"hello world!"}, $set:{"title":"《New Title》"}}, {upsert:true})
  2. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  3. >
  4. > db.Blog.find()
  5. { "_id" : "123456", "blog_cont" : "abcdef", "title" : "《New Title》
  6. { "_id" : "123", "blog_cont" : "abc123", "other" : "hello world!" }
  7.  

更多关于Python相关内容感兴趣的读者可查看jb51专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号