3 创建,更新及删除文档
来源:互联网 发布:windows 加密文件系统 编辑:程序博客网 时间:2024/06/07 09:52
插入并保存文档
db.coll.insert()
插入的机制,是使用驱动程序将数据转为Bson的形式,然后将其送入数据库。数据库解析Bson,检验是否包含"_id"键并且文档不超过4MB。
如果验证正确,则插入只是简单的将文档原样存入数据库中,这样有可能会插入无效的数据。如果需要检查,则可以在启动的时候执行
MongoDB在插入时并不执行代码,所以这块天生就没有注入式攻击的可能
删除文档
db.coll.remove()
上述命令会删除集合coll的所有文档,但不会删除集合本身,原有的索引也会保留。
Remove可以接受一个参数作为删除条件,比如删除mailing.list集合中所有"optout"为true的人:
Db.mailing.list.remove({"optout":true})
如果要删除一个集合的所有数据,建议直接删除集合然后建立索引比删除所有数据快的多
如果只是删除文档中的一个属性,则可以先得到此对象,然后删除此对象的属性(假如删除xiaozhe文档中的年龄属性):
Var
delete
更新文档
更新文档使用update方法进行修改,update有两个参数,一个是条件,一个是修改器文档,描述对找到的文档做哪些修改。
例如:在coll集合中有一个原始文档为{
Var
Xiaozhe.age=22
Xiaozhe.sex="male"
Db.coll.update({"name":"xiaozhe"},xiaozhe)
一般修改器
通常文档只会有一部分要更新,利用原子的更新修改器,可以使这种部分更新极为高效。更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整、增加或者删除键,还可能是操作数组或者内嵌文档。
$inc
用来增加已有键的值或者在键不存在时创建一个键。例子:假如我需要统计访问www.xiaozhe.com页面的访问次数,每当访问一次就把count加上1,可以通过修改器
db.coll.update({"url":"www.xiaozhe.com"},{"$inc":{"count":1}})
$set
用来指定一个键的值,如果这个键不存在,则创建它。如果存在,则进行更新文档。这对更新模式或者增加用户定义键来说非常方便。例如:给用户新增一个爱好是篮球。
db.coll.update({"_id":ObjectId("xxxxx")},{"$set":{"favor":"baskteball"}})
$unset
用来删除某个指定的键,如果删除用户的爱好.
db.coll.update({"name":"xiaozhe"},{"$unset":{"favor":1}})至于为什么后面要加1呢,因为javascript为严格的Json对象,所以后面加个1是为了确保删除的是一个Json对象。
数组修改器
$push
如果指定的键存在,则可以用"$push"向已有的数组末尾加入一个元素,要是没有键,则会自动创建一个数组(对象也可以)。
db.blog.update({"name":"xiaozhe"},{"$push":{"arr":["a","b""c"]}})
db.blog.update({"name":"xiaozhe"},{"$push":{"arr":{"a":1,"b":2,"c":3}}})
$ne和$addToSet
经常遇到如果这个值不在数组中,就把这个值加进去,那就可以使用$ne。例如:如果dlr不在数组arr里面,则把dlr加入到arr中。
db.coll.update({"arr":{"$ne":"dlr"}},{"$push":{"arr":"dlr"}})
但是有时候$ne经常出问题,所以还是用$addToSet比较好。
因为使用$addToSet插入的数据可以避免重复。
db.test.update({"name":"xiaozhe"},{"$addToSet":{"arr":"ddd"}})
$addToSet和$each组合起来可以添加多个不同的值
例如:想一次添加多个邮件信息。
db.coll.update(
{"_id"
{"$addToSet":{"emails":{"$each":["a@q.com","b@q.com"]}}}
)
$pop
可以删除数组中的元素,{"$pop":{"key":1}}是从数组末尾删除,{"$pop":{"key":-1}}是从数组开头删除。
..
..
..
$pull
可以将匹配的部分全部删掉,例如数组num有3个值1,2,3,4,现在删除数组num中的2。
db.coll.update(
..{"name":"xiaozhe"},
..{"$pull":{"num":2}}
)
数组的定位修改器
若数组有多个值,而我们只想对其中的一部分操作,可以通过位置或者定位操作符("$")
例如:有一个文档的数据为:
data={
...
...
…
...
...
...
...
我要修改其中comments.2.name的值3为c,但是如果我们必须要提前知道name为3的值在数组是第几位,为了解决这个问题,我们使用$定位符。
>
...
...
...
注意:定位符只会更新第一个匹配的元素,如果有多个name是3,则会匹配第一个找到的文档数据。
$upsert
upsert是一种特殊的更新,要是没有文档符合更新的条件,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。
例如:我们有一个点击量计算,如果存在url则点击增1,如果不存在则创建。(注意,update的第三个参数就是upsert是否开启)
shell>db.coll.update({“url”:”www.xx.com”}:{“$inc”:{“count”:1}},ture).
save
save是一个shell函数,可以在文档不存在的时候插入,文档存在时更新。它只有一个参数,要是这个文档存在“_id”键,save会调用upsert,否则会调用插入。
例子:>
>
>
要是不用save,最后一行的更新会很罗嗦,如下:
>
更新多个文档
默认情况下,更新只会对符合条件的第一个文档执行更新操作,如果要达到多个符合条件的文档一起更新,则需要将update的第四个参数设为true。
注意:有可能服务器默认会更新所有匹配的文档,所以建议以后显示的表示是否要做多个文档的更新。
例如:要给每位用户生日的时候发送一个生日礼物。
>
{“birthday”:”13/11/1990”},
{“$set”:{“gift”:”Happy
false,
true
)
要想知道到底有多少个用户被更新了,可以执行如下命令:
>
返回已更新的文档
findAndModify
用getLastError命令仅能得到有限的信息,并不能返回已更新的文档,可以使用findAndModify命令来做到,但是速度更新速度慢了点,但是得到的信息多一点。其中有几个参数如下:
findAndModify:字符串,集合名
query:查询文档,用来检索文档的条件
sort:排序结果的条件
update:修改器文档,对所找到的文档执行更新
remove:布尔类型,表示是否删除文档
new:布尔型,表示返回的是更新前还是更新后的文档,默认是更新前
注意:update和remove必须有一个并且只能有其中一个。
Exp:
Var
"query":{"name":"xiaozhe"},
"update":{"$set":{"age":21}}, //更新值
"new":true
)
直接打印obj
- 3 创建,更新及删除文档
- 学习MongoDB--(3-1):创建、删除及更新文档
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- 使用XmlDocument创建XML文档及增加删除更新节点
- MangoDB创建、更新、删除文档
- mongoDb 文档创建、更新、删除
- 3.MangoDB创建、更新、删除文档
- MongoDB初探-创建,更新和删除文档
- MongoDB创建\更新\删除文档操作
- MongoDB的用户创建更新及删除
- 创建、编辑、删除XML文档及文档的内容
- lucene-索引文档的删除、更新及增强加权
- jQuery阻止冒泡和HTML默认操作
- Lvs dr服务器脚本配置
- Vsftp的配置方法
- 设置Ubuntu系统和Vim字符集为utf8
- ubuntu下LAMP环境安装(最佳的PHP环…
- 3 创建,更新及删除文档
- 用PHP实现定时器功能
- mongodb 4 查询
- mongodb 5 索引
- COM理解
- 使用vba进行Word文档的数学格式设置
- Squid普通代理设置
- 6 聚合
- 7 MongoDB进阶指南