MongoDB入门学习(三):MongoDB的增删查改(二)

2014-11-24 10:28:26 · 作者: · 浏览: 1
然后将person的age赋为20,删除country字段,再替换原来查询到的文档,如果一个文档有很多字段,而我们只要修改其中一到两个字段,这种方式就比第一种方式要简单的很多。但是这样就有个问题,如果findOne匹配到第二个mary,更新的时候却更新到了第一个mary,那就会出现"_id"重复的问题。这样就有了修改器的使用,是更新变的更简单高效。

1).$set

$set用来修改指定键的值(也可以是内嵌文档的键),如果这个键不存在就创建它,如:

> db.people.find()
{ "_id" : ObjectId("53a3b0e633c516902a43a790"), "name" : "mary", "age" : 30, "country" : "US", "school" : { "name" : "BeijingUniversity", "city" : "Beijing" } }
> db.people.update({"name" : "mary"}, {"$set" : {"age" : 20, "school.name" : "QinghuaUniversity"}})
> db.people.find()
{ "_id" : ObjectId("53a3b0e633c516902a43a790"), "name" : "mary", "age" : 20, "country" : "US", "school" : { "name" : "QinghuaUniversity", "city" : "Beijing" } }

2).$unset

$unset用来将键完全删除,如:

> db.people.find()
{ "_id" : ObjectId("53a3a1c1abda49d7dfce102d"), "name" : "mary", "age" : 20, "country" : "US" }
> db.people.update({"name" : "mary"}, {"$unset" : {"country" : 1}})
> db.people.find()
{ "_id" : ObjectId("53a3a1c1abda49d7dfce102d"), "age" : 20, "name" : "mary" }

3).$inc

$inc用来增加已有键的值,当键不存在时创建这个键,再在初始值0的基础上再增加,$inc对应的键必须是数字类型的,如果是别的数据类型就会报错,如:

> db.people.find()
{ "_id" : ObjectId("53a3b0e633c516902a43a790"), "age" : 20, "country" : "US", "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$inc" : {"age" : 1}})
> db.people.find()
{ "_id" : ObjectId("53a3b0e633c516902a43a790"), "age" : 21, "country" : "US", "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$inc" : {"age" : -2}})
> db.people.find()
{ "_id" : ObjectId("53a3b0e633c516902a43a790"), "age" : 19, "country" : "US", "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$inc" : {"country" : 2}})
Cannot apply $inc modifier to non-number

4).$push,$pushAll

$push用来对内置数组的操作,给内置数组添加元素,$push是添加一个元素,$pushAll是添加一个数组,如:

> db.people.find()
{ "_id" : ObjectId("53a3b47733c516902a43a791"), "name" : "mary", "friends" : [  "amy",  "join" ] }
> db.people.update({"name" : "mary"}, {"$push" : {"friends" : "joe"}})
> db.people.find()
{ "_id" : ObjectId("53a3b47733c516902a43a791"), "friends" : [  "amy",  "join",  "joe" ], "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$push" : {"friends" : ["jodan", "mical"]}})
> db.people.find()
{ "_id" : ObjectId("53a3b47733c516902a43a791"), "friends" : [  "amy",  "join",  "joe",  [  "jodan",  "mical" ] ], "name" : "mary" }

5).$addToSet,$each

$addToSet用来给内置数组添加元素,如果数组中已经存在相同值的元素,就不添加,用来避免重复,通常和$each组合使用,$each后面跟一个数组用来添加该数组中的元素如:

> db.people.find()
{ "_id" : ObjectId("53a3c18533c516902a43a794"), "friends" : [  "amy" ], "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$addToSet" : {"friends" : "join"}})
> db.people.find()
{ "_id" : ObjectId("53a3c18533c516902a43a794"), "friends" : [  "amy",  "join" ], "name" : "mary" }
> db.people.update({"name" : "mary"}, {"$addToSet" : {"friends" : {"$each" : ["amy", "join", "jodan"]}}})
> db.people.find()
{ "_id" : ObjectId("53a3c18533c516902a43a794"), "friends" : [  "amy",  "join",  "jodan" ], "name" : "mary" }

6).$pull,$pullAll

$pull用来删除内置数组中的某元素,$pullAll删除某几个元素,如:

 db.people.find()
{ "_id" : ObjectId("53a3c18533c516902a43a794"), "name" : "mary", "friends" : [  "amy",  "join",  "jodan",  "mical" ] }
> db.people.update({"name" : "mary"}, {"$pull" : {"friends" : "amy"}})
> db.people.find()
{ "_id" : ObjectId("53a3c18533c516902a43a794"), "friends" : [  "join",  "jodan",  "mical" ], "nam