MongoDB自学笔记12---4.4更新文档(二)

2014-11-24 17:08:09 · 作者: · 浏览: 1

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

> db.user.update({name:"user2"},{$inc:{age:10}}) /*将name为user2的年龄age加上10 */

> db.user.find()

{ "_id" : 2, "name" : "user2","age" : 12 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

> db.user.update({name:"user6"},{$inc:{age:-4}}) /*将name为user6的年龄age加上-4,也就是减去4*/

> db.user.find()

{ "_id" : 2, "name" : "user2","age" : 12 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

$set

语法:db.collection.update({ field: value1 }, { $set: { field1: value2 } } );

当文档中包含该字段的时候,更新该字段值为value2,如果该文档中没有该字段,则为本文档添加一个字段file1,并为其赋值给value2。

> db.user.find()

{ "_id" : 2, "name" : "user2","age" : 12 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

> db.user.update({name:"user2"},{$set:{age:20}}) /*将name为user2的age设置为20 */

> db.user.find()

{ "_id" : 2, "name" : "user2","age" : 20 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

> db.user.update({name:"user2"},{$set:{sex:"nan"}})/*将name为user2的sex设置为nan,但是没有该字段,所以为该文档添加sex字段并赋值为nan */

> db.user.find()

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

{ "_id" : 2, "age" : 20, "name" :"user2", "sex" : "nan" }

$unset

语法:db.collection.update({ field: value1 }, { $unset: { field1: } } );

参数arg可以使用true或者空字符串””,这样都会删除一个字段。

> db.user.find()

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

{ "_id" : 2, "age" : 20, "name" :"user2", "sex" : "nan" }

> db.user.update({name:"user2"},{$unset:{sex:1}}) /*删除name为user2的sex字段.如果删除一个不存在的字段,并不会报错,没有什么效果 */

> db.user.find()

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 2 }

{ "_id" : 2, "age" : 20, "name" :"user2" }

$rename

语法:{$rename: { : , : , ... } }

为文档中的一个或者多个字段改名。

> db.test.find()

{ "_id" : 1, "ary" : [ 3, 4, 5, [ 6, 7 ], 9 ]}

{ "_id" : 2, "ary" : [ 6 ], "text" :"test" }

> db.test.update({_id:1},{$rename:{ary:"aryNew"}})

> db.test.find()

{ "_id" : 1, "aryNew" : [ 3, 4, 5, [ 6, 7 ], 9 ]}

{ "_id" : 2, "ary" : [ 6 ], "text" :"test" }

$setOnInsert

语法:db.collection.update(,

{ $setOnInsert:{ : , ... } },

{upsert: true }

)

$setOnInsert只有在upsert设置为true,并且被更新的文档不存在此集合中,需要插入一个新的文档的时候才起作用。在插入的时候会为新插入的文档添加给定的字段。

>db.user.update({name:"user1"},{_id:1,name:"user1"},1)

> db.user.find()

{ "_id" : 1, "name" : "user1" }

>db.user.update({name:"user2"},{$setOnInsert:{name:"user2",age:2}},1)

> db.user.find()

{ "_id" : 1, "name" : "user1" }

{ "_id" : ObjectId("51a02848d02692fff25c4238"),"age" : 2, "name" : "user2" }

> db.user.update({name:"user2"},{$setOnInsert:{name:"user3",age:3}},1)

> db.user.find()

{ "_id" : 1, "name" : "user1" }

{ "_id" : ObjectId("51a02848d02692fff25c4238"),"age" : 2, "name" : "user2" }

这个方法是在mongodb2.4中新加入的,具体在什么情况下使用,还不是很清楚。

$push

语法:db.collection.update(,

{ $push:{ : } }