db.collection.update( criteria, objNew, upsert, multi )

criteria : update的查询条件,类似sql update查询内where后面的
objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新

1.$inc-----加法
匹配查询到的第一条记录,给指定数据的指定字段执行加法,如果字段不存在 则会自动添加该字段。
db.collection.update({name:"test"},{$inc:{source:80}})

2.$mul-----乘法
匹配查询到的第一条记录,取值做乘法; 如果字段不存在 则创建该字段并赋0值
数据:{ _id: 1, item: "ABC", price: 10.99 }
执行:db.collection.update({_id:1},{$mul:{price:1.25}}) //price字段值*1.25
结果:{ _id: 1, item: "ABC", price: 13.7375 }

3.$rename---列重命名
db.collection.update({_id:1},{$rename:{nmae:name}},false,true) //将列名nmae 修改为 name

db.collection.update({_id:1},{$rename:{"name.first":"name.fname"}}) 	//将内嵌文档列名 name.first 修改成 name.fname;

注意:"_id"字段的列名不能改

4.$unset----删除列
db.collection.update({_id:1},{$unset:{name:""}}) //删除id=1的数据的name字段

5.$min
使用指定的值和find()到的数据的指定列比较,如果指定的值小于数据库里面的值,则执行更新
如果指定的字段不存在,则添加字段并设值

例子数据中:value.fssum=3,value.xzsum=3;
db.test_person_count_day.update({"_id.name":"551"},{$min:{"value.fssum":4}}) //执行更新

db.test_person_count_day.update({"_id.name":"551"},{$min:{"value.xzsum":2}})	//什么也不做

6.$max 与$min相反
用指定值与数据库里的值做对比,如果指定的值大于数据库里面的值,则执行更新

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

db.user.update({name:"user2"},{"$setOnInsert":{age:12}},{"upsert":true}); //集合中没有name:user2的数据,插入成功
//{_id:"ObjectId(xxxx.....)",name:"user2",age:12}
db.user.update({name:"user2"},{"$setOnInsert":{"sex":"男"}},{"upsert":true})  //不执行任何操作

---------------------修改字段的数据类型
格式:

db.collectionName.find({"列名":{$type:Type Number}}).forEach(

function(x){

x.列名 = new NumberLong(x.列名);

db.collectionName.save(x);

}

)

将Int转化为String类型,只需将每条数据的int字段数据前后加上双引号
如:x.业务号码 = ""+x.业务号码+"";

-----------数组操作--------------------------------------------------------------------------------
1.$addToSet
往指定的数组中添加一个元素,如果该元素已经存在,则不作任何更新;
db.collection.update({_id:1},{$addToSet:{tags:"java"}}) ;往集合的tags数组中添加元素"java"

2.$pop
通过指定是1还是-1来删除数据的最后一个,或第一个元素
db.collection.update({_id:1},{$pop:{tags:1}}) //删除tags数组的最后一个元素

db.collection.update({_id:-1},{$pop:{tags:-1}})  //删除tags数组的第一个元素

3.$pullAll
删除数组中指定的所有元素
数据:{ _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] }
执行:db.collection.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
结果:{ "_id" : 1, "scores" : [ 2, 1 ] }

4.$pull
删除数组中指定的元素或者满足条件的元素
数据:{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }
执行:db.collection.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )
结果:{ _id: 1, votes: [ 3, 5 ] }

5.$push
往数组中插入元素,可配合$each,$sort,$slice使用
$each:一般用于配合$push,$addToSet使用
$sort:必须配合$each使用
$slice:用于限制数组的元素个数

6.$position
用于向数组中添加元素时指定位置(默认会往数组的末尾添加)
数据:{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
执行:db.collection.update(
{_id:1},
{$push:{scores:{$each:[65,66],$position:2}}}
)
结果:{ "_id" : 1, "scores" : [ 50, 60, 65, 66, 70, 100 ] }

--------------------------------迁移
1.将集合A中的数据复制到集合B中

db.A.find({}).forEach(function(item){

db.B.insert(item);

})