相同点(没有主键“_id”时)
当执行的SQL语句中没有主键“_id” 时,insert 和 save 的操作完成一致,没有什么区别
db.attendance.insert({name:"test1",age:10});
db.attendance.save({name:"test2",age:10});
执行结果: 会增加两个数据,但是 _id不一样。
不同点(有主键“_id”时)
若新增的数据中有主键“_id” 时,insert() 会提示错误,而save() 则更新原来的内容为新内容
例子:
数据库(集合中)中,已经存在一条数据,_id是 5fcf674c69eca313a2e87a83,如下
{"_id" : ObjectId(“5fcf674c69eca313a2e87a83”), “name” : “test1”, “age” : 10}
当insert 、save的执行数据中 有_id 也是 5fcf674c69eca313a2e87a83 时,如:
db.stud.insert({_id:"5fc6055204ad0b26d14ea2f1",name:"test3",age:20})
db.stud.save({_id:"5fcf674c69eca313a2e87a83",name:"test4",age:20})
insert 执行时,会抛出主键重复的错误,保存失败
save 执行的是更新操作,更新后的数据是
{ "_id" : "5fcf674c69eca313a2e87a83", "name" : "test4", "age" : 20}
总结:
insert 就是 插入 操作;如果主键存在,则抛异常
save 就是 插入或 更新;如果 _id 的值 存在就更新,不存在就插入