MongoDB save()方法和insert()方法的区别
MongoDB save()方法和insert()方法的区别
首先看官方文档怎么说的
Updates an existing document or inserts a new document, depending on its document parameter
save方法有更新和插入两种功能,到底是插入还是更新文档取决于save的参数。那么到底是依赖于哪个参数呢?继续看
If the document does not contain an _id field, then the save() method calls the insert() method. During the operation, the mongo shell will create an ObjectId and assign it to the _id field.
可以看到决定是插入一个文档还是更新,取决于_id参数。如果能根据_id找到一个已经存在的文档,那么就更新。如果没有传入_id参数或者找不到存在的文档,那么就插入一个新文档。
举一个官方的例子
不带_id参数
db.products.save( { item: "book", qty: 40 } )
结果
{ "_id" : ObjectId("50691737d386d8fadbd6b01d"), "item" : "book", "qty" : 40 }
MongoDb客户端驱动会自动为你生成一个默认
ObjectId作为_id。
带_id参数,但是找不到一个已经存在的文档
db.products.save( { _id: 100, item: "water", qty: 30 } )
结果
{ "_id" : 100, "item" : "water", "qty" : 30 }
还是插入一个新文档,但是_id不会自动生成。
带_id参数,但是有存在的文档
db.products.save( { _id : 100, item : "juice" } )
结果
{ "_id" : 100, "item" : "juice" }
更新了文档
总结
- insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据。
- save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
好文要顶 关注我 收藏该文
MongoDB save()方法和insert()方法的区别相关推荐
- 请简述一下线程的sleep()方法和yield()方法的区别?
请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...
- Java并发编程—schedule方法和scheduleAtFixedRate方法的区别
原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...
- flush方法和close方法的区别
package com.learn.Demo05Writer;import java.io.FileWriter; import java.io.IOException;/*flush方法和close ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- dispose方法和setvisible方法的区别和使用
dispose方法和setvisible方法的区别: dispose()撤销当前窗口,并释放当前窗口所使用的资源. setVisible()方法仅仅隐藏窗体,可设置窗口是否可见,窗口默认是不可见的. ...
- get方法和post方法的区别及常用的请求方式
get方法和post方法的区别: get方法是从服务器上获取资源:post方法是向服务器传送数据: get方法参数是通过url传递的,post方法是放在request body中:GET比POST更不 ...
- Keras中predict()方法和predict_classes()方法的区别
正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...
- VBA中Activate方法和Select方法的区别
VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...
最新文章
- 使用editcap命令将ERF格式转换为pcap格式
- 微量元素重塑新生态-农业大健康·李喜贵:谋定功能性农业
- 【BZOJ-2325】道馆之战 树链剖分 + 线段树
- (二):集成日志框架:springboot使用logback日志框架
- 基于C#在WinCE6.0系统SQLCE3.5的安装开发使用
- python建筑案例_Python数据分析实战-链家北京二手房价分析
- python 公开课_python公开课视频(11~20)
- 安装deepin_deepin使用笔记,安装steam客户端
- php mysql服务器配置_PHPMYSQL服务器配置说明_PHP
- linux 关闭redis 命令_面试必问的 Redis:RDB、AOF、混合持久化
- android打印动画,Android 中的转场动画及兼容处理
- win7域用户生成临时文件夹
- swift 有道 翻译文档(1 定义变量常量,数组字典)
- linux启动java命令
- opendrive中的Road
- 零中频接收机频率转换图_VHF跳频电台接收机射频前端的仿真设计
- 流程图与算法_流程图与算法之间的区别
- 一个佛教的故事,割肉
- oracle datamodeler,查看您的 Oracle SQL Developer Data Modeler 设计
- UI设计中异常状态设计总结