MongoDB-插入数据insert、insertOne、insertMany、save用法介绍

举报
小博测试成长之路 发表于 2022/07/19 00:49:47 2022/07/19
【摘要】 先针对上篇文章中MongoDB的_id字段含义做一些补充的描述,上篇文章地址: MongoDB-_id字段的含义介绍 补充说明:MongoDB是一个分布式的数据库,使用ObjectId类型数据作为主键的话,可以有效避免不同机器写入数据时_id的唯一性。上篇文章中有介绍过ObjectId类型的_id每一位对应的含义。 除了之前...

先针对上篇文章中MongoDB的_id字段含义做一些补充的描述,上篇文章地址:

MongoDB-_id字段的含义介绍

补充说明:MongoDB是一个分布式的数据库,使用ObjectId类型数据作为主键的话,可以有效避免不同机器写入数据时_id的唯一性。上篇文章中有介绍过ObjectId类型的_id每一位对应的含义。

除了之前介绍过的,可以自定义_id的值以外,_id字段的类型除了可以用字符串、数字以外,还可以用一些比较复杂的数据格式做主键:

db.getCollection("user").insert({"_id":{"regionId":6,"name":"小燕子"}, "name": "小燕子","age": 18,"height": 178})
  

a9b59ed75f48f84c2dea03914d423094.png


接下来我们一起看一下在mongodb中要插入数据的话,格式是怎么样的:

插入单条数据语法:

db.collection.insert(   <document>,   {writeConcern: <document>,       ordered: <boolean>   })db.collection.insertOne(   <document>,   {writeConcern: <document>   })
  

使用案例:


   
  1. db.getCollection("user").insert({"name": "尔康"})
  2. db.getCollection("user").insert({"name": "尔康"},{ordered:true})
  3. db.getCollection("user").insertOne({name: "金锁", "age": 45, "sex": "girl"})
  4. db.getCollection("user").insertOne({_id"No.01",name: "尔泰", "age": 36, "sex""boy"})

注意事项:

insertOne函数一次只能插入一条数据,如果插入多条的话,是会报错的:

fecbd99a87db7247961f33fa73b099c8.png

插入多条:

db.collection.insert([ <document 1> , <document 2>, ... ],   {writeConcern: <document>,      ordered: <boolean>   })db.collection.insertMany([ <document 1> , <document 2>, ... ],   {writeConcern: <document>,      ordered: <boolean>   })
  

参数说明(部分参数在单条和多条插入时均可用):

  • document:要插入的数据,一般为bson格式,看上去就跟json差不多,或者python里面的dict

  • writeConcern(可选):写入策略,一般可以不写,有个简单的了解即可。

    具体用法参考官方文档:https://www.mongodb.com/docs/manual/reference/write-concern/

    csdn上也有其他人对其进行整理中文的描述:https://blog.csdn.net/xiaoliuliu2050/article/details/102951111  

    ordered(可选):指定是否按顺序写入,默认 true,按顺序写入。为true时,插入多条数据时,有一条报错就中断后面的操作。为false,报错的被跳过,后面的继续执行。

使用案例:


   
  1. db.getCollection("user").insert([
  2. { _id: "No.01", name: "紫薇", "age": 50, "sex": "girl" },
  3. { name: "乾隆", "age": 70, "sex": "boy" },
  4. { name: "五阿哥", "age": 45, "sex": "boy" }
  5. ])
  6. db.getCollection("user").insertMany([
  7. { _id: "No.02", name: "萧十一郎", "age": 50, "sex": "girl" },
  8. { name: "杨开泰", "age": 70, "sex": "boy" },
  9. { name: "连城璧", "age": 45, "sex": "boy" }
  10. ])

save方法:


   
  1. db.getCollection("user").save({_id: "No.01",name: "尔泰", "age": 36, "sex": "boy"})
  2. db.getCollection("user").save({_id: "No.01",name: "尔泰1", "age": 36, "sex": "boy"})
  3. db.user.find({})

9806bb8e9119f4afd7e0f9dd16267f56.png

从上图可以看出:save是插入/覆盖操作。

注意:save方法一次只能操作一条记录,操作多条的时候会报错:

de88a6da2e77c91ff68d4e25c2b5562b.png

insertOne和save不同,主键冲突时insertOne会报错,而save会直接用新值覆盖久值

如果文章对你有帮助,记得转发留言、点赞加关注哦!

如果你对目前的工作比较困惑,不知道如何去提升自己,欢迎报名咨询付费服务,详细介绍可见:职场大咖带你助攻面试求职+职业发展

END

9e442a5527ea5032b8483038aa8f1c4a.png

所有原创文章

第一时间发布至此公众号「小博测试成长之路」

cc741d0dcfa4cfa1591efcef1ba2a142.jpeg

长按二维码/微信扫码  添加作者

文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaobotester.blog.csdn.net/article/details/125839950

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。