Mongo官方文档翻译 (四)
2013-01-23 10:42
246 查看
更新操作!
官方文档地址: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 } }
)
3.如果<update>参数包含的字段并不存在于当前文档中,update()会把这些字段添加到当前文档
中。
下面的操作查询了bios聚集的文档中第一个拥有_id等于3的文档,而且在该文档的添加了mnranch字段以及子文档name中
添加了一个aka的字段:
db.bios.update(
{ _id: 3 },
{ $set: {
mbranch: 'Navy',
'name.aka': 'Amazing Grace'
}
}
)
4.如果<update>参数只包含字段和值的pairs,update()方法会利用<update>参数中的文档对象替换当前文档中
除了_id字段以外的全部字段。
下面的操作查询了bios聚集中第一个name字段等于{ first: 'John', last: 'McCarthy' } 的文档,并且利用
<update>中的文档替换了该文档除_id字段之外的所有字段:
db.bios.update(
{ name: { first: 'John', last: 'McCarthy' } },
{ name: { first: 'Ken', last: 'Iverson' },
born: new Date('Dec 17, 1941'),
died: new Date('Oct 19, 2004'),
contribs: [ 'APL', 'J' ],
awards: [
{ award: 'Turing Award',
year: 1979,
by: 'ACM' },
{ award: 'Harry H. Goode Memorial Award',
year: 1975,
by: 'IEEE Computer Society' },
{ award: 'IBM Fellow',
year: 1970,
by: 'IBM' }
]
}
)
5.如果update操作要求更新一个数组字段中的元素:
1.update()方法会通过调用该元素的下表于.操作符来进行更新。
MongoDB中的数组下表是从0开始的!
2.下面的操作将bios聚集中_id字段为1的文档的contribs数组字段的第二个元素进行了更新:
db.bios.update(
{ _id: 1 },
{ $set: { 'contribs.1': 'ALGOL 58' } }
)
3.update()方法可以在目标数组字段的下标未知的情况下通过$操作符来更新。数组字段必须必须出现在quer参数中,
以便于update()方法决定对那个数组元素进行更新.
下面的操作将更新bios聚集中_id字段等于3的文档的contribs数组字段中包含“complier“的字段,如果找到,update()
方法会将第一个比配的文档的属性更新为A compiler:
db.bios.update(
{ _id: 3, 'contribs': 'compiler' },
{ $set: { 'contribs.$': 'A compiler' } }
)
6.如果<options>参数中multi属性值为true或1,则update()方法会修改查询结果中所有匹配的文档。
下面的操作会查询bios聚集的所有文档中名为awards的子文档中award属性为“Turing”的文档,并设置该文档的
属性为true,并且multi属性为ture!
db.bios.update(
{ 'awards.award': 'Turing' },
{ $set: { turing: true } },
{ multi: true }
)
7.如果把<options>参数中upsert属性设置为true或1,并且没有能匹配<query>参数的文档存在,那么update()方法会在聚集
中插入一个新的文档!
下面的操作会查询bios聚集中文档_id字段值为11而且name字段值为{ first: 'James', last: 'Gosling'}的文档,如果检索
能找到一个文档,update()方法会表现为updage操作,如果没有匹配到文档,update()会插入一个新文档,该文档由<query>中的
字段和值以及<update>参数中指定对相应字段的更新操作!
db.bios.update(
{ _id:11, name: { first: 'James', last: 'Gosling' } },
{
$set: {
born: new Date('May 19, 1955'),
contribs: [ 'Java' ],
awards: [
{ award: 'The Economist Innovation Award',
year: 2002,
by: 'The Economist' },
{ award: 'Officer of the Order of Canada',
year: 2007,
by: 'Canada' }
]
}
},
{ upsert: true }
)
注意:如果<update>参数仅包含字段-值的数据对,则新文档中会包含<update>参数中指定的字段-值 数据对信息。如果<update>参数
只是包含一些update operators,那么,新的文档会从<query>参数中取得字段-值信息以及<update>参数中对相关字段所定义的操作(set,unset等)!
保存
save()方法会根据文档中的_id字段来更新或者新建一个文档。save()方法和update()方法在对于_id字段在upsert操作和<query>参数上是很相似的。
save()方法有如下的句法:
db.collection.save( <document> )
通过下面的例子思考save()方法的用法:
1.如果<document>参数包含的_id字段可以再聚集中找到,则save()方法会用<document>文档替换已存在的文档。
下面的操作会查询bios聚集的文档中_id字段值为:ObjectId("507c4e138fada716c89d0014")的文档,并且用<document>参数去更新和替换匹配到的文档!
db.bios.save(
{
_id: ObjectId("507c4e138fada716c89d0014"),
name: { first: 'Martin', last: 'Odersky' },
contribs: [ 'Scala' ]
}
)
2.如果<document>参数中_id字段不存在或者存在_id字段但是没有找到匹配的文档,则save()函数会表现为一个insert操作!
下面的操作会自动的为<document>参数添加_id字段,并且赋值一个唯一的ObjectId,然后插入这个构造好的新文档!
db.bios.save(
{
name: { first: 'Larry', last: 'Wall' },
contribs: [ 'Perl' ]
}
)
更新操作:
字段的操作:
1.$inc
2.$rename
3.$set
4.$unset
数组的操作
1.$
2.$addToSet
3.$pop
4.$pullAll
5.$pull
6.$pushAll
7.$push
位操作
1.$bit
隔离操作
1.$isolated
官方文档地址: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 } }
)
3.如果<update>参数包含的字段并不存在于当前文档中,update()会把这些字段添加到当前文档
中。
下面的操作查询了bios聚集的文档中第一个拥有_id等于3的文档,而且在该文档的添加了mnranch字段以及子文档name中
添加了一个aka的字段:
db.bios.update(
{ _id: 3 },
{ $set: {
mbranch: 'Navy',
'name.aka': 'Amazing Grace'
}
}
)
4.如果<update>参数只包含字段和值的pairs,update()方法会利用<update>参数中的文档对象替换当前文档中
除了_id字段以外的全部字段。
下面的操作查询了bios聚集中第一个name字段等于{ first: 'John', last: 'McCarthy' } 的文档,并且利用
<update>中的文档替换了该文档除_id字段之外的所有字段:
db.bios.update(
{ name: { first: 'John', last: 'McCarthy' } },
{ name: { first: 'Ken', last: 'Iverson' },
born: new Date('Dec 17, 1941'),
died: new Date('Oct 19, 2004'),
contribs: [ 'APL', 'J' ],
awards: [
{ award: 'Turing Award',
year: 1979,
by: 'ACM' },
{ award: 'Harry H. Goode Memorial Award',
year: 1975,
by: 'IEEE Computer Society' },
{ award: 'IBM Fellow',
year: 1970,
by: 'IBM' }
]
}
)
5.如果update操作要求更新一个数组字段中的元素:
1.update()方法会通过调用该元素的下表于.操作符来进行更新。
MongoDB中的数组下表是从0开始的!
2.下面的操作将bios聚集中_id字段为1的文档的contribs数组字段的第二个元素进行了更新:
db.bios.update(
{ _id: 1 },
{ $set: { 'contribs.1': 'ALGOL 58' } }
)
3.update()方法可以在目标数组字段的下标未知的情况下通过$操作符来更新。数组字段必须必须出现在quer参数中,
以便于update()方法决定对那个数组元素进行更新.
下面的操作将更新bios聚集中_id字段等于3的文档的contribs数组字段中包含“complier“的字段,如果找到,update()
方法会将第一个比配的文档的属性更新为A compiler:
db.bios.update(
{ _id: 3, 'contribs': 'compiler' },
{ $set: { 'contribs.$': 'A compiler' } }
)
6.如果<options>参数中multi属性值为true或1,则update()方法会修改查询结果中所有匹配的文档。
下面的操作会查询bios聚集的所有文档中名为awards的子文档中award属性为“Turing”的文档,并设置该文档的
属性为true,并且multi属性为ture!
db.bios.update(
{ 'awards.award': 'Turing' },
{ $set: { turing: true } },
{ multi: true }
)
7.如果把<options>参数中upsert属性设置为true或1,并且没有能匹配<query>参数的文档存在,那么update()方法会在聚集
中插入一个新的文档!
下面的操作会查询bios聚集中文档_id字段值为11而且name字段值为{ first: 'James', last: 'Gosling'}的文档,如果检索
能找到一个文档,update()方法会表现为updage操作,如果没有匹配到文档,update()会插入一个新文档,该文档由<query>中的
字段和值以及<update>参数中指定对相应字段的更新操作!
db.bios.update(
{ _id:11, name: { first: 'James', last: 'Gosling' } },
{
$set: {
born: new Date('May 19, 1955'),
contribs: [ 'Java' ],
awards: [
{ award: 'The Economist Innovation Award',
year: 2002,
by: 'The Economist' },
{ award: 'Officer of the Order of Canada',
year: 2007,
by: 'Canada' }
]
}
},
{ upsert: true }
)
注意:如果<update>参数仅包含字段-值的数据对,则新文档中会包含<update>参数中指定的字段-值 数据对信息。如果<update>参数
只是包含一些update operators,那么,新的文档会从<query>参数中取得字段-值信息以及<update>参数中对相关字段所定义的操作(set,unset等)!
保存
save()方法会根据文档中的_id字段来更新或者新建一个文档。save()方法和update()方法在对于_id字段在upsert操作和<query>参数上是很相似的。
save()方法有如下的句法:
db.collection.save( <document> )
通过下面的例子思考save()方法的用法:
1.如果<document>参数包含的_id字段可以再聚集中找到,则save()方法会用<document>文档替换已存在的文档。
下面的操作会查询bios聚集的文档中_id字段值为:ObjectId("507c4e138fada716c89d0014")的文档,并且用<document>参数去更新和替换匹配到的文档!
db.bios.save(
{
_id: ObjectId("507c4e138fada716c89d0014"),
name: { first: 'Martin', last: 'Odersky' },
contribs: [ 'Scala' ]
}
)
2.如果<document>参数中_id字段不存在或者存在_id字段但是没有找到匹配的文档,则save()函数会表现为一个insert操作!
下面的操作会自动的为<document>参数添加_id字段,并且赋值一个唯一的ObjectId,然后插入这个构造好的新文档!
db.bios.save(
{
name: { first: 'Larry', last: 'Wall' },
contribs: [ 'Perl' ]
}
)
更新操作:
字段的操作:
1.$inc
2.$rename
3.$set
4.$unset
数组的操作
1.$
2.$addToSet
3.$pop
4.$pullAll
5.$pull
6.$pushAll
7.$push
位操作
1.$bit
隔离操作
1.$isolated
相关文章推荐
- Mongo官方文档翻译 (五)
- Mongo官方文档翻译 (三)
- Mongo官方文档翻译 (一)
- Mongo官方文档翻译 (二)
- Python3.2官方文档翻译--使用二进制数据记录布局和多线程
- 【Tomcat 6.0官方文档翻译】—— 简介
- nginx的rewrite模块官方英文文档的节选翻译
- ICE官方文档中2.2【The Ice Architecture】章节翻译之二
- 翻译: jQuery1.4官方文档
- RocketMQ官方文档翻译-2
- 【Block编程第一篇】 block编程热点介绍(官方文档翻译的)
- Android Studio 提示与技巧(官方文档翻译)
- android 官方文档 个人翻译 Bluetooth 蓝牙
- SparkSql官方文档中文翻译(java版本)
- UIImagePickerController---iOS-Apple苹果官方文档翻译
- JNI官方文档翻译6-异常
- 基本控件文档-UISwitch属性---iOS-Apple苹果官方文档翻译
- cockroach官方文档翻译---2.6 存储层
- 自己翻译的官方文档:tomcat配置log4j
- 第34篇 翻译webrtc浏览器之间通信的官方文档