MongoDB创建、更新及删除文档

1.1插入并保存文档

插入是向MongoDB中添加数据的基本方法。对目标机使用insert方法,插入一个文档:

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

这个操作会给文档增加一个"_id"键(要是原来没有的话),然后将其保存到MongoDB中。

1.1.1 批量插入

如果要插入多个文档,使用批量插入会快一些。批量插入能传递一个由文档构成的数组给数据库。只有插入多个文档到一个集合的时候,这种方式才会有用,而不能批量插入一次对多个集合执行操作。要是只是导入原始数据(如从数据feed或Mysql中导入),可以使用命令行工具,如mongoimport,而不是使用批量插入,批量插入的时候对消息的长度有限制。

1.1.2 插入:原理和作用

当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送人数据库。数据库解析BSON,检验是否包含“_id”键并且文档不超过4MB,其他不做别的数据验证,只是简单将文档原样存入数据库。这样有好有坏,最明显的副作用就是允许无效的数据插入,好处是它能让数据库更加安全,远离注入式攻击。因为插入时并不执行代码,所以没有这块没有注入式攻击的可能。传统的注入式攻击对Mongodb来说无效。

1.2 删除文档

删除现有数据库中的数据:

> db.users.remove()

上述命令删除users集合中所有文档。但不会删除集合本身,原有索引也会保留。remove函数可以接受一个查询文档作为参数。给定这个参数后,只有符合条件的文档才被删除。如:要删除mailing.list集合中所有“optout”为true的人:

> db.mailing.list.remove({optout:true})

删除数据是永久性的,不能撤销,也不能删除。

删除文档通常会很快,但是要清除整个集合,直接删除集合(然后重建索引)会更快。

1.3 更新文档

使用update方法修改文档。update有两个参数,一个是查询文档,用来找出来要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改。

更新是原子的:若是两个更新同时发生,先到达服务器的先执行,接着执行另一个,所以,互相有冲突的更新可以火速传递,并不会互相干扰:最后的更新会取得“胜利”。

1.3.1 文档替换

变成下面这样:

可以用update来替换文档:

常见错误就是查询条件匹配了多个文档,然后更新的时候由于第二个参数的存在就产生重复的“_id”值。数据库会报错,不做任何修改。(除了shell外,一般程序不会报错,除非用getLastError)

为了避免这种情况,最好确保更新总是指定唯一文档,如通过像“_id”这样的键来匹配。

1.3.2 使用修改器

通常文档只会有一部分要更新。利用原子的更新修改器,可以使得这种部分更新极为高效。更新修改器是种特殊的键,用来指定复杂的更新操作,如调整,增加或删除键,还可以是操作数组或者内嵌文档。

例如要记录网站访问情况,当有人访问的时候,就要增加计数器,可以使用更新修改器原子性地完成这个增加:

在php中,$表示变量前缀,在双引号中以$开头的字符串都会替换成变量,可以转义$:"\$foo"。也可以使用单引号‘$foo‘,就不会解释变量。还可以设置php.ini文件的mongo.cmd_char,可以用=,:,?或者任何你觉得可以替代$的字符都可以。如选择~,就可以用~inc当作\$inc。

使用修改器时,“_id”的值不能改变。(注意,整个文档替换时是可以改变“_id”的。)其他键值,包括其他唯一索引的键,都是可以更改的。

1.“$set”修改器

“$set”用来指定一个键的值。如果这个键不存在,则创建它。这对更新模式或者增加用户定义键来说非常方便。

上述文档想要添加喜欢的书籍进去,可以使用“$set”:

要是用户觉得喜欢的其实是另外一本书,"$set"又能帮上忙:

"$set"修改数据类型,如用户喜欢的是一堆书,可以将“favorite”键的值变成一个数组

如果用户突然发现自己不爱读书,可以用“$unset”将键完全删除:

也可以用“$set”修改内嵌文档:

2.增加和减少

“$inc”修改器来增加已有键的值,或者在键不存在的时创建一个键。对于分析数据,因果关系,投票或者其他数值变化的地方,使用这个都会非常方便。

如游戏集合,如果小球撞到砖块,给玩家加分,这里基数给50,可以使用“$inc”修改器给玩家加50分:

分数键(score)原来并不存在,所以“$inc”创建了这个键,并把值设定成增加量:50。

“$inc”和"$set"的用法类似,就是专门用来增加(和减少)数字的。“$inc”只能用于整数,长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败,其中包括很多语言会自动转换成数字的类型,如null,布尔类型或数字构成的字符串。

“$inc”键的值必须为数字。不能使用字符串,数组或其他非数字的值。否则提示如下错误:

3.数组修改器

数组操作,只能用在值为数组的键上。如不能对整数做push,也不能对字符串做pop。使用“$set”或“$inc”来修改标量值。

如果指定键已存在,“$push”会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。

要想添加一条评论,可以使用“$push”:

经常有这种情况,一个值不在数组里面就把它加进去。可以在查询文档中用“$ne”来实现,如:要是作者不在引文中就添加进去:

也可以用“$addToSet”完成同样的事,要知道有些情况“$ne”根本行不通,有时候更适合用“$addToSet”。

将“$addToSet”和“$each”组合起来,可以添加多个不同的值,而用“$ne”和“$push”组合就不能实现。

有几个从数组删除元素的方法,若把数组看成队列和栈,可以用“$pop”,这个修改器可以从数组任何一端删除元素。{$pop:{key:1}}从数组末尾删除一个元素,{$pop:{key:-1}}则从头部删除。

有时候要特定条件删除元素,不仅是依据位置,“$pull”可以做到。如下:

“$pull”会将所有匹配的部分删掉。对数组[1,1,2,1]执行pull 1,得到结果就是只有一个元素的数组[2]。

4.数组的定位修改器

时间: 2024-12-05 08:18:18

MongoDB创建、更新及删除文档的相关文章

MongoDB数据库更新和删除文档

创建集合 createCollection() <span style="font-size:14px;">name:创建的集合名称 options:是一个作为初始化的文档(可选)</span> <span style="font-size:14px;">> db.createCollection("jingdong") #无参数 { "ok" : 1 } > show coll

MongoDB学习笔记二:创建、更新及删除文档

插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个"_id"键(要是原来没有的话),然后将其保存到MongoDB中.批量插入 如果要插入多个文档,使用批量插入会快一些.批量插入传递一个由文档构成的数组给数据库.如果只是导入数据(例如,从数据feed或者MySQL中导入),可以使用命令行工具,如mongoimport,而不是使用批量插入. 删除

MongoDB学习笔记-创建、更新、删除文档

创建 MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中. db.foo.insert({“hehe”:”呵呵”}) 如果想批量插入的话可以使用下面这种形式:db.foo.insert([{“hehe”:”呵呵”},{“haha”:”哈哈”}]) 插入校验 插入数据时MongoDB只对数据进行最基本的检查-检查文档的基本结构.如果没有“_id”字段,就会自动增加一个,所有文档都必须小于16MB(这个值是MongoDB设计者人为定义的,未来可能会增加).这样的限制主要

创建、更新、删除文档。 --- Mongodb权威指南阅读。

插入文档: db.foo.insert({ "key" : "value"}); 使用insert插入一个数据,文档中如果没有_id 会自动给文档增加_id. batchInsert(Array)  批量插入,接受一个文档数组做参数. 使用批量插入最大长度48M,如果过程中一个失败,失败之前会插入成功,之后全都失败. 可以设置continueOnError 选项设置忽略错误并且继续插入. 插入校验: 所有文档必须都小于16M. 删除文档: db.foo.remove

mongoDB更新和删除文档(document)

整理来自 https://www.shiyanlou.com/courses/running/57 启动 $ sudo service mongodb start 进入MongoDB命令行操作界面,在命令行中敲exit可以退出 $ mongo 实验中的布尔类型的ture用1代替,false用0代替 创建数据库 范例:进入mongoDB命令行操作界面之后,进行如下操作: > use Chenshi switched to db Chenshi 您可以使用db命令查看您当前选择的数据库 > db

03.创建、更新和删除文档。

插入: >db.collectionName.insert({"bar":"baz")} 批量插入:如果要向集合插入多个文档,使用批量插入会快一些. batchInsert函数实现批量插入,它接受一个文档数组作为参数. >db.collectionName.batchInsert([ {"_id:0}, {"_id":1}, {"_id":2} ]) >db.collectionName.find(

MongoDB创建\更新\删除文档操作

?? 一.插入\创建文档 --当插入一个不存在的文档时,会自动创建一个文档 [[email protected] ~]# mongo MongoDB shell version: 2.4.14 connecting to: test > show collections > db.cols.insert({bar:"baz"}) > db.cols.find() { "_id" :ObjectId("56aac1df4e61b6d9f84

MongoDB(二)创建更新删除文档

插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz"}) 如果要批量插入怎么办呢,看下面代码: >db.foo.insert([{"_id":0},{"_id":1},"{"_id":2}]) 以前有一个batchInsert函数,现在已经没有了.注意在批量插入的过程中如果有一个文档插

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->