mongodb crud 之 insert

mongodb插入数据的方法:

1.db.collection.insert()
2.db.collection.insertOne()
3.db.collection.insertMany()
4.db.collection.save()

上述方法的区别:

db.collection.insert() 包括insertOne()和insertMany()的功能。
db.collection.save() 根据_id,如果存在即修改,不存在就插入。
insertMany的限制:
  1. 每一组操作最大可以有1000个文档。
  2. 顺序添加的速度要慢于不按顺序添加的。
  3. 不存在的集合会自动创建。
  4. insertMany() 也不支持db.collection.explain() 可以使用insert 代替
  5. 如果添加出错会报出 BulkWriteError exception 异常,按照顺序添加的 操作遇到错误会直接停止,而不按照顺序的会继续执行在队列中的写操作。

关于upsert: upsert=update+insert 找到更新,找不到就插入
关于replaceOne:默认覆盖找到的第一条数据

参数详解:

1.插入顺序: {ordered:false}:
测试:1.默认不设置ordered参数时,插入多个文本发生错误时是否能跳过错误而不是终止执行
测试准备脚本:for(var i=1;i<5;i++){db.hh.insert({_id:i,name:"h"+i});}
当执行脚本:var array=[];
for(var i=3;i<=8;i++){array.push({_id:i,name:"h"+i});};
db.hh.insert(array);
测试结果:"errmsg" : "E11000 duplicate key error collection: test.hh index: _id_ dup key: { : 3.0 }",主键重复,集合文档数量还是为四条。
2.设置参数,重新执行:脚本变化为db.hh.insert(array,{ordered:false})
测试结果:依然发生主键重复报错,但是集合文档此时发生变化,集合数量为8.
2.写关注:{ writeConcern: { w: "majority", wtimeout: 5000 } }(复制级需要,确定数据写入大部分数据节点,主节点返回写入成功,规定写入超时时间为5000毫秒。)

常见写入报错:

1:检查复制级的当前状态,rs.status()
WriteResult({
   "nInserted" : 1,
   "writeConcernError" : {
      "code" : 64,
      "errmsg" : "waiting for replication timed out at shard-a"
   }
})
2:主键重复
WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 11000,
      "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_  dup key: { : 1.0 }"
   }
})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值