日期:2014-05-16  浏览次数:20420 次

Mongo官方文档翻译 (四)
更新操作!
官方文档地址:http://docs.mongodb.org/manual/applications/update/


更新


在数据库的四种基本操作中,更新操作是指那些在MongoDB聚集中修改现有记录或文档的操作。

修改操作用来修改聚集中已经存在的一个或多个文档。MongoDB提供了如下的方式来进行更新操作:

1.update
2.save

注意:仔细思考MongoDB中的update操作的下列行为:
1.当更新操作是的目标文档大小超出了文档原来的大小的时候,更新操作会
在磁盘上重新迁移文档,并且会影响到字段的顺序,这依赖于更新操作的类型!
2.对于如下的驱动版本,所有的写操作都会发出一个getLastError命令,来确认
写操作的结果!
C#, version 0.7
Java, version 2.10.0
Node.js, version 1.2
Perl, version 0.601.1
PHP, version 1.4
Python, version 2.4
Ruby, version 1.8

更新
update()方法是用来修改MongoDB聚集中文档的基础方法。默认情况下,update()方法更新一个文档,
如果使用了multi 操作,update()方法会更新聚集中所有符合query标准的文档。update()方法既可以
用新文档替换现有的文档,也可以对现有文档的指定字段进行修改。

update()方法有如下句法:

db.collection.update( <query>,<update>,<options> )

SQL中类似的操作:update()方法类似于SQL 中的UPDATE子句,并且:
1.<query>参数类似于WHERE子句,并且:
2.<update>参数类似于SET子句。
默认的update()方法更新一条文档类似于SQL中带有LIMIT 1子句的UPDATE。
带有multi操作的update方法类似于SQL中没有LIMIT限制的UPDATE子句!

通过下面的示例来思考update()方法的使用:
1.如果<update>参数只包含更新操作如:$set操作符,update()方法会更新类似的字段,如果要
更新子文档中的字段可以通过.操作符。

下面的操作查询了bios聚集的所有文档中_id字段等于1的文档的子文档name中maddle字段值为
Warner并且在awards字段中添加一个新元素。

db.bios.update(
  { _id: 1 },
  {
    $set: { 'name.middle': 'Warner' },
    $push: { awards: { award: 'IBM Fellow', year: 1963, by: 'IBM' } }
  }
)

2.如果<update>参数包含$unset操作,update()方法会将其中包含的字段从文档中移除。

下面的操作查询了bios聚集的文档中第一个_id字段等于3的文档,并且移除例如该文档的
birth字段:

db.bios.update(
  { _id: 3 },
  { $unset: { birth: 1 } }
)