注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

MongoDB:更新记录( Update )  

2012-11-13 17:54:37|  分类: MongoDB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


      同上,紧接着学习 MongoDB 的数据更新语法。


一.更新一条记录
--1.1 查询 id=1 的 documents

 > db.test_2.find({id:1});
{ "_id" : ObjectId("50a0d46ceb825d827b0c3f9b"), "id" : 1, "name" : "francs" }
{ "_id" : ObjectId("50a12e34f73f2e4aa1ff71bc"), "id" : 1, "name" : "francs" }
   

--1.2 更新 id=1 的 documents 的 name 字段为 'name_2'

 > db.test_2.update({id:1},{$set:{name:'name_2'}});
   


--1.3 再次查询 id=1 的 documents

 > db.test_2.find({id:1});
{ "_id" : ObjectId("50a0d46ceb825d827b0c3f9b"), "id" : 1, "name" : "name_2" }
{ "_id" : ObjectId("50a12e34f73f2e4aa1ff71bc"), "id" : 1, "name" : "francs" }
       备注:发现只更新一条匹配的记录。
  

二. 更新多条记录
--2.1 查询 id=2 的 documents

 > db.test_2.find({id:2});
{ "_id" : ObjectId("50a0d46ceb825d827b0c3f9c"), "id" : 2, "name" : "fpZhou" }
{ "_id" : ObjectId("50a12e7cf73f2e4aa1ff71bd"), "id" : 2, "name" : "fpZhou" }
{ "_id" : ObjectId("50a12f47f73f2e4aa1ff71be"), "id" : 2, "name" : "fpZhou" }
   


--2.2 更新 id=2 的 documents 的 name 字段为 'name_3'

 > db.test_2.update({id:2},{$set:{name:'name_3'}},{multi:true});
   


--2.3 再次查询 id=2 的 documents

 > ;db.test_2.find({id:2});
{ "_id" : ObjectId("50a0d46ceb825d827b0c3f9c"), "id" : 2, "name" : "name_3" }
{ "_id" : ObjectId("50a12e7cf73f2e4aa1ff71bd"), "id" : 2, "name" : "name_3" }
{ "_id" : ObjectId("50a12f47f73f2e4aa1ff71be"), "id" : 2, "name" : "name_3" }

备注:默认情况下 update() 仅更新第一条匹配的记录,如果想更新多条,需要设置
           multi 参数为 true。


三. 被更新的记录不存在的情况
--3.1 查询 id=6 的 documents

 > db.test_2.find({id:6});

   备注:id=6 的记录不存在。

 

--3.2 不加 upsert 参数的更新

 > db.test_2.update({id:6},{$set:{name:'name_6'}});
> db.test_2.find({id:6});
>

  备注:这时更新后,没有新增 id=6 的记录。

 

--3.3 带  upsert 参数的更新

 > db.test_2.update({id:6},{$set:{name:'name_6'}},{upsert:true});
> db.test_2.find({id:6});
{ "_id" : ObjectId("50a1328f7543857379c2bb38"), "id" : 6, "name" : "name_6" }
>

  备注:如果被更新的 document 不存在,可以通过指定 upsert 参数确定是否要插入
           一条新记录,如果为 truce 则插入,否则,不插入。


四. 附
附一 .update() 语法
db.collection.update( criteria, objNew, upsert, multi )

criteria - query which selects the record to update;
objNew -   updated object or $ operators (e.g., $inc) which manipulate the
           object
upsert -   if this should be an "upsert" operation; that is, if the record(s) do
           not exist, insert one. Upsert only inserts a single document.
multi -    indicates if all documents matching criteria should be updated rather
           than just one. Can be useful with the $ operators below.

     If you are coming from SQL, be aware that by default, update() only modifies
   the first  matched object. If you want to modify all matched objects, you need
   to use the multi flag.


附二. $set 语法
    Use the $set operator to set a particular value. The $set operator requires the
 following syntax:
 
  db.collection.update( { field: value1 }, { $set: { field1: value2 } } );
 
   This statement updates in the document in collection where field matches value1 by
replacing the value of the field field1 with value2. This operator will add the speci
fied field or fields if they do not exist in this document or replace the existing
valueof the specified field(s) if they already exist.
  
  
五. 参考
http://www.mongodb.org/display/DOCS/Updating
http://docs.mongodb.org/manual/reference/sql-comparison/
http://docs.mongodb.org/manual/reference/operators/#_S_set  

  评论这张
 
阅读(32716)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016