删掉一个字段

删除某条数据的field1字段:db.collection.update({"_id" : "10001"}, {$unset: {"field1":1}});
批量删除field1字段:db.collection.update( {"field1": {$exists:true}}, {$unset: {"field1":1}}, {"multi":1} )

修改字段名

db.collection.update({}, {$rename : {"old_field" : "new_field"}}, false, true)

修改子集的字段(把旧字段的值赋值到新字段,然后删掉旧字段)

db.collection.find({"list.oldField":{$exists:true}}).forEach(
    function(data) {
        for( var i = 0; i < data.list.length; i++) {
            data.list[i].newField = data.list[i].oldField;
            delete data.list[i].oldField;
        }
        db.collection.update({"_id":data._id}, data);
    }
)

修改子集字段值

{
    "_id" : ObjectId("6018bc71c59a6e7b16a4ec24"),
    "name" : "中国",
    "lists" : [
        {
            "id" : "11",
            "proviceName" : "广东省",
            "proviceCode" : "guangdong"
        },
        {
            "id" : "22",
            "proviceName" : "广西省",
            "proviceCode" : "guangxi"
        }
    ]
}
修改语句:
db.test_sublist.update({"lists.id":"22"}, {$set: {"lists.$.proviceCode":"guangxi"}}, false, true)

找出field1字段数据类型为double的数据

db.collection.find({"field1":{$type:"double"}}).count() 或者 db.collection.find({"field1":{$type:1}}).count()

修改字段类型

double转int32 -> db.collection.find().forEach( function(data) { db.collection.update( {"_id":data._id}, {$set:{"field1":NumberInt(data.field1)}} ) } );
String转Array -> db.collection.find().forEach( function(data) { db.collection.update({"_id":data._id}, {$set:{"field1":Array(data.field1)}}, false, true) } );

修改子集集合中字段的类型

db.collection.find({"list": {$exists: true}}).forEach(
	function(data) {
		for(var i = 0; i < data.list.length; i++) {
			db.collection.update({"_id": data._id, "list.name": data.list[i].name}, {$set: {"list.$.name": new Date(data.list[i].name) }}, false, true)
		}
	}
);

把一个库数据迁移到另一个库

db.collection.find({}).forEach(
	function(data) {
		db.getSiblingDB("test_db")["collection"].insert(data);
	}
)
03-23 05:07