创建 更新和删除文档

简介: 插入并保存文档插入数据可以使用insert方法向目标集合插入一个文档。db.foo.insert({"bar" : "baz"})批量插入批量插入使用batchInsert函数实现批量插入,它与insert函数非常像,只是它接受的是一个文档数组作为参数。

插入并保存文档

插入数据可以使用insert方法向目标集合插入一个文档。

db.foo.insert({"bar" : "baz"})

批量插入

批量插入使用batchInsert函数实现批量插入,它与insert函数非常像,只是它接受的是一个文档数组作为参数。

db.foo.batchInsert([{"_id" : 0}, {"_id" : 1}, {"_id" : 2}])

插入校验

插入数据时,MongoDB只对数据进行基本的检查:
如果没有"_id"字段,就自动增加一个;
所有文档都必须小于16M。

删除文档

db.foo.remove()

更新文档

使用update来更新数据库中的文档。
“$set”修改器

“$set”用来指定一个字段的值,如果这个字段不存在,则可以创建它。
使用“$unset”则可以直接删除这个字段和相应的值。
删除数据是永久性的,不能撤销,也不能恢复。 删除文档通常很快,但是如果要清空整个集合,那么使用drop直接删除集合会更快(然后在这个空集合上重建各项索引)。

增加和修改

“$inc”修改器用来增加已有的键的值,或者该键不存在那就创建一个。对于更新分析数据,因果关系,投票或者其他由变化数值的地方,只用这个都会非常的方便。
"$inc"和“$set”的用法类似,就是专门来增加(和减少)数字的。“$inc”只能用于整形,长整形或双精度浮点型的值。要是用在其他类型的数据上就会导致操作失败,例如null,布尔型以及数字构成的字符串。

添加元素

“$push”会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组。
将数组做俄日数据集来使用

你可能想将数组作为数据集使用,保证数组中的元素不会重复。可以在查询文档中用“$ne”来实现。

删除元素

有几个从数组中删除元素的方法。若是把数组看成是队列或者栈,可以用“$pop”,这个修改器可以从数组的任何一端删除元素。{"$pop":{"key":1}} 从数组末尾删除一个元素, {"$pop":{"key":-1}} 则从头部删除。
“$pull”会将所有匹配的文档删除,而不是只删除一个。
修改器的速度

有的修改器运行速度比较块。$inc能就地修改,因为不需要改编文档的大小,只需要将键的值修改一下(对文档的大小的改变),所以非常的块。而数组修改器可能会改变文档的大小,就会慢一些。
将文档插入到MongoDB中时,依次插入的文档在磁盘上的位置是相邻的。因此如果一个文档变大了,原先的位置就放不了这个文档,这个文档就会被移动到集合中的另一个位置。

upsert

upsert是一种特殊的更新。要是没有找到符合条件的更新的文档,就会以这个条件和更新文档为基础创建一个新的文档。upsert非常方便,不必预置集合,同一套代码既可以用于创建新的文档又可以用于更新文档。
更新多个文档

默认情况下,更新只能对符合匹配条件的第一个文档进行操作。要是有多个文档符合条件,只有第一个文档会被更新,其他文档不会发生变化。要更新所有匹配的文档,可以将update的第4个参数设置为true。
返回被更新的文档

调用getLastError仅能够获得关于更新的有限信息,并不能返回被更新的文档。可以通过findAndModify命令得到被更新的文档。这对于操作队列以及执行其他需要进行原子性取值和赋值。
findAndModify命令有很多可以使用的字段:
findAndModify 字符串,集合名
query 查询文档,用于检索文档的条件
sort 排序结果的条件
update 修改器文档,用于对匹配的文档进行更新
remove 布尔类型,表示是否删除文档
new 布尔类型,表示返回更新前的文档还是更新后的文档
fields 文档中需要返回的字段(可选)
upsert 布尔类型,值为true时表示这是一个upsert,默认值是false

写入安全机制

写入安全(Write Concern)是一种客户端设置,用于控制写入的安全级别。默认情况下,插入,删除和更新都会是一直等待数据库的响应,然后才会继续执行。通常遇到错误时,客户端会抛出一个异常。
两种最基本的写入安全机制是应答写入和非应答写入。应答写入是默认的方式:数据库会给出响应,告诉你写入操作是否成功执行。非应答式写入不返回任何响应。+

通常来说,应用程序应该使用应答式写入。但是,对于一些不是特别重要的数据(比如日志或者是批量加载数据),你可能不愿意为了自己不关心的数据而等待数据库的响应。这种情况下,可以使用非应答式写入。
尽管非应答式写入不返回数据库错误,但是这并不代表应用程序不需要作错误检查。如果尝试向已经关闭的套接字(socket)执行写入,或者写入套接字时发生了错误,都会引起异常。

相关文章
|
缓存 算法 NoSQL
【分布式详解】一致性算法、全局唯一ID、分布式锁、分布式事务、 分布式缓存、分布式任务、分布式会话
分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同,称之为副本一致性(consistency)。副本一致性是针对分布式系统而言的,不是针对某一个副本而言。强一致性(strong consistency):任何时刻任何用户或节点都可以读到最近一次成功更新的副本数据。强一致性是程度最高的一致性要求,也是实践中最难以实现的一致性。单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,这个用户不会再读到比这个值更旧的值。
1127 0
|
10月前
|
Python
使用 Pandas 库时,如何处理数据的重复值?
在使用Pandas处理数据重复值时,需要根据具体的数据特点和分析需求,选择合适的方法来确保数据的准确性和唯一性。
633 64
|
JavaScript 前端开发 API
Fish开发与使用
审批系统使用es5,现在fish组件里面,用了大量的bind(this)方法,bind解决了this作用域问题,es6有箭头函数解决这个问题 es5没有箭头函数。 正常的js文件中必须包含的几个内容: 1.在文件的开始,要引入当前js文件需要用到的html文件,调接口使用到的action文件,或者特定样式的css文件, 引入HTML文件,格式是:”hbs!”+对应文件的整个路径, 引入js文件,格式是:对应文件的整个路径,文件名不需要加后缀名js
Fish开发与使用
|
机器学习/深度学习 存储 数据采集
阿里云 ACP是什么?阿里云 ACP有什么用?
ACP是什么,它是阿里云企业推出的针对于数据分析工程师的资格认证,有极高的含金量。因为阿里云在国内市场处于领先地位,他们推出的资格认证自然而然受到很多人的欢迎,很多互联网行业从业人员都以获得阿里ACP认证为荣。那么,阿里云 ACP是什么?阿里云 ACP有什么用?在认证大使官网上查阅了相关资料,我得到了答案
2939 0
阿里云 ACP是什么?阿里云 ACP有什么用?
|
网络安全
kali 启用默认root,开启SSH服务,安装VNC,设置服务自启动
启用默认root,开启SSH服务,设置服务自启动,安装VNC
|
存储 弹性计算 Kubernetes
Cgroup引发非预期行为——容器12C性能不如8C
背景压测信息:压测工具是jmeter,压测的并发数都是1并发,压测的URL固定。资源信息:ACK集群的ECS是32C, ingress pod 无limit限制, 业务pod采用绑核处理8c或12c链路:客户端 ->  nginx(同VPC下的ECS )-> SLB > ingress pod ->   业务pod  问题客户压测时候, 采用slo-manager对业务p
552 0
Cgroup引发非预期行为——容器12C性能不如8C
|
弹性计算 负载均衡 关系型数据库
阿里云云计算ACP认证集训营来袭!掌握云计算ACP认证95%考点,轻松拿证!
课程内容由ACP认证考点衍生展开,5天直播课程+10节视频课程+7张阿里云Clouder认证+认证模拟试卷,实现学、练、考无缝衔接,学完所有认证知识点。
阿里云云计算ACP认证集训营来袭!掌握云计算ACP认证95%考点,轻松拿证!
|
SQL 数据采集 运维
Dataphin V3.7 版本发布!通过国产化适配、数据研发体验优化、数据治理能力提升和标签平台,帮助企业加速构建数据中台
本次发布的V3.7版本中,Dataphin重点围绕资产建设平台的易用性及可交付性、资产治理平台的完备性以及基础平台的稳定性和开放性进行优化与升级。通过国产化支持适配、数据研发体验优化、数据治理能力提升和标签平台,帮助企业加速构建企业级数据中台,轻松拥有好数据!
Dataphin V3.7 版本发布!通过国产化适配、数据研发体验优化、数据治理能力提升和标签平台,帮助企业加速构建数据中台
|
存储 文件存储 索引
408王道操作系统强化——文件管理及大题解构(上)
408王道操作系统强化——文件管理及大题解构
410 1
408王道操作系统强化——文件管理及大题解构(上)