文档存入数据库以后,就可以使用update方法来修改它。update有两个参数,一个是查询文档,用来找出要更新的文档,另一个是修改器(modifier文档),描述对找到的文档做哪些更改。更新操作是原子的,若是两个更新同时发生,先到达服务器的先执行,接着执行另外一个。所以互有冲突的更新可以火速传递,并不会相互干扰。
一.文档替换
更新最简单的情形就是用一个新的文档替换匹配的文档。这适用于模式结构发生了较大的变化。
- {
- "_id" : ObjectId("503b08dea53a93158463f02e"),
- "name" : "joe",
- "friend" : 32,
- "enemies" : 23
- }
- > var joe = db.users.findOne({"name":"joe"})
- > joe.relationships={"friends":joe.friends,"enemies":joe.enemies};
- { "friends" : undefined, "enemies" : 23 }
- > joe.relationships={"friends":joe.friend,"enemies":joe.enemies};
- { "friends" : 32, "enemies" : 23 }
- > joe.username=joe.name;
- joe
- > delete joe.friends;
- true
- > delete joe.enemies;
- true
- > delete joe.name;
- true
- > db.users.update({"name":"joe"},joe)
- > db.users.findOne();
- {
- "_id" : ObjectId("503b08dea53a93158463f02e"),
- "friend" : 32,
- "relationships" : {
- "friends" : 32,
- "enemies" : 23
- },
- "username" : "joe"
- }
- > delete joe.friend;
- true
- > db.users.update({"name":"joe"},joe)
- > var joe = db.users.findOne({"name":"joe"})
- > db.users.findOne();
- {
- "_id" : ObjectId("503b08dea53a93158463f02e"),
- "friend" : 32,
- "relationships" : {
- "friends" : 32,
- "enemies" : 23
- },
- "username" : "joe"
- }
通常文档只会有一部分要更新。利用原子的更新修改器,可以使得这种部分更新极为高效。更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整、增加或者删除键,还可能是操作数组或者内嵌文档。
1.“$set” 修改器入门
"$set"用来指定一个键的键值,如果这个键不存在,则创建它。这对更新模式或者增加用户定义键来说非常方便。