mongodb insert()和save()的相同点和不同点

 

一、相同点(没有主键“_id”时):

当执行的SQL语句中没有主键“_id” 时,insert 和 save 的操作完成一致,没有什么区别。

db.stud.insert({name:"zhangsan",age:1});
db.stud.save({name:"zhangsan",age:1})

执行结果: 会增加两个数据,但是 _id不一样。

 

二、不同点(有主键“_id”时):

若新增的数据中有主键“_id” 时,insert() 会提示错误,而save() 则更新原来的内容为新内容。

例子:

数据库(集合中)中,已经存在一条数据,_id是 5bc29e3a09ec11608e9ccb92,如下

{"_id" : ObjectId("5bc29e3a09ec11608e9ccb92"), "name" : "zhangsan", "age" : 1}

当insert 、save的执行数据中 有_id 也是 5bc29e3a09ec11608e9ccb92 时,如:

db.stud.insert({_id:"5bc29e3a09ec11608e9ccb92",name:"lisi",age:2})

db.stud.save({_id:"5bc29e3a09ec11608e9ccb92",name:"wangwu",age:3})

依次执行,

insert 执行时,会抛出主键重复的错误,保存失败;

save 执行的是更新操作,更新后的数据是

{ "_id" : "5bc29e3a09ec11608e9ccb92", "name" : "wangwu", "age" : 3}

三、总结:

insert 可以理解 就是 插入 操作;如果主键存在,则抛异常;

save 可以理解为 插入或 更新;如果 _id 的值 存在就更新,不存在就插入。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值