MongoDB更新文档 [四]

MongoDB更新文档

转载请出自出处:http://eksliang.iteye.com/blog/2174104

MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。

语法结构如下:

db.collection.update( criteria, objNew, upsert, multi)

参数含义

参数    含义
criteria update的查询条件,类似sql update查询内where后面的
objNew update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的修改列
upsert 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

一、文档替换

1、最简单的更新就是用一个新文档完全替换匹配文档。

参考实例

 

> user=db.user.findOne()
{
        "_id" : ObjectId("54ae6fb5b94cf1b60f10570f"),
        "name" : "ickes",
        "pwd" : "xl1",
        "sal" : 1
}
> user.sal=1200                      --将该文档的sal改为1200
1200
> db.user.update({"pwd":"xl1"},user) --完全用新的文档替换集合中pwd=xl的文档
> db.user.findOne()                  --在次查看,替换成功
{
        "_id" : ObjectId("54ae6fb5b94cf1b60f10570f"),
        "name" : "ickes",
        "pwd" : "xl1",
        "sal" : 1200
}
       温馨提示:当查询条件匹配了多个文档,然后更新时由于第二个参数的存在就产生的重复“_id”的值。数据库就会抛出错误。

二、使用更新修改器

      通常文档只会有一部分需要更新。可以使用“更新修改器”指定对文档中的某些字段进行更新。更新修改器是特殊的键,用来指定复杂的更新操作,比如修改、添加、删除键,还可以操作数组和内嵌文档。

 1)$inc修改器

       这个修改器是用来计数增加的(如果键不存在会在文档中增加键),例如有一个网站,当有人访问页面时,就计数加一,来做统计

    参考实例

 

> db.iteye.findOne()
{
        "_id" : ObjectId("54af318953b409e1c2efa8d8"),
        "title" : "iteye",
        "count" : 1   --该值本来为1
}
> db.iteye.update({"title":"iteye"},{"$inc":{"count":1}}) --计数修改加1,如果是2,就会加2
> db.iteye.find()     --再次查看
{ "_id" : ObjectId("54af318953b409e1c2efa8d8"), "title" : "iteye", "count" : 2 } --修改成功
 
2)$set、$unset修改器

 “$set”修改器用来指定一个字段的值。如果这个字段不存在,则创建他。$unset就是将文档中的某个键完全删除

参考实例

 

> db.user.find()
{ "_id" : ObjectId("54ae6fb5b94cf1b60f105710"), "name" : "xialiang" }
> db.user.update({"name":"xialiang"},{"$set":{"name":"xl","title":"MongoDB"}})
--用set修改器修改第一条数据,name本来就存在,那么修改,而title在原文档中本来不存在,自动添加
> db.user.find() --查看修改结果,发现跟理论一样
{ "_id" : ObjectId("54ae6fb5b94cf1b60f105710"), "name" : "xl", "title" : "MongoD
B" } 
 “$set”修改器修改嵌套文档     参考实例
> db.iteye.find() --查看iteye集合,里面有一个blog的内嵌文档
{ "_id" : ObjectId("54af318953b409e1c2efa8d8"), "title" : "iteye", "count" : 4,
"blog" : { "title" : "eksliang.iteye.com", "name" : "ickes" } }
> db.iteye.update({"blog.name":"ickes"},{"$set":{"blog.name":"xl"}}) --用$set修改内嵌文档
> db.iteye.find() --查看当前修改,很明显修改成功
{ "_id" : ObjectId("54af318953b409e1c2efa8d8"), "title" : "iteye", "count" : 4,
"blog" : { "title" : "eksliang.iteye.com", "name" : "xl" } }
 “$unset”删除文档的键 参考实例
> db.user.find({"name":"xl"}) --查询name=xl的文档
{ "_id" : ObjectId("54ae6fb5b94cf1b60f105710"), "name" : "xl", "title" : "MongoD
B" }
> db.user.update({"name":"xl"},{"$unset":{"title":1}}) --删除title这个键(这里删除键的值,官网说为任意数字,我测试时,任何值都是没有任何问题的)
> db.user.find({"name":"xl"}) --再次查看,发现键删除成功
{ "_id" : ObjectId("54ae6fb5b94cf1b60f105710"), "name" : "xl" }
   三、数组修改器          

        

猜你喜欢

转载自eksliang.iteye.com/blog/2174104