update命令还有两个参数,分别位列第三第四位置,这个两个参数类型为bool。默认值都为false

update命令全部为

db.collectionName.update(query, obj, upsert, multi);

upsert为是否对搜索不到的对象进行创建。

multi为是否多全部搜索到的对象进行处理。

先说upsert

> db.users.find();



{ "_id" : ObjectId("4fd20d79931bd9b6138172f8"), "user" : "may" }
{ "_id" : ObjectId("4fd20e22931bd9b6138172f9"), "user" : "may", "age" : 20 }




我们可以看到这个collection中共有两个文档

> db.users.update({"school": "tjut"}, {"$set": {"user": "kai"}}, true);

我们执行上述命令,这个命令的意思是,尝试获取某个school为tjut的记录,并设定user为kai,如果不存在,则增加这个记录。

我们执行这个命令后查看记录

> db.users.find();

{ "_id" : ObjectId("4fd20d79931bd9b6138172f8"), "user" : "may" }
{ "_id" : ObjectId("4fd20e22931bd9b6138172f9"), "user" : "may", "age" : 20 }
{ "_id" : ObjectId("4fd20e89939e6548f004bfe8"), "school" : "tjut", "user" : "kai" }

我们发现增加了school为tjut,user为kai的文档。

multi

可多多个记录进行设定

> db.users.update({"user": "may"}, {"$inc": {"age": 1}});

//搜索user为may的用户,对age进行+1处理

> db.users.find();

{ "_id" : ObjectId("4fd20e22931bd9b6138172f9"), "user" : "may", "age" : 20 }
{ "_id" : ObjectId("4fd20e89939e6548f004bfe8"), "school" : "tjut", "user" : "kai" }
{ "_id" : ObjectId("4fd20d79931bd9b6138172f8"), "age" : 1, "user" : "may" }

我们发现只对一个记录进行了age + 1处理。没有对所有的user为may的记录进行+1处理。

> db.users.update({"user": "may"}, {"$inc": {"age": 1}}, false, true);

如果我们执行上述,则表明。搜索所有user为may的文档,这定这个文档的中age +1 ,如果不存在user为may的记录则不进行任何操作。

> db.user.find(); //查找一下

{ "_id" : ObjectId("4fd20e22931bd9b6138172f9"), "user" : "may", "age" : 21 }
{ "_id" : ObjectId("4fd20e89939e6548f004bfe8"), "school" : "tjut", "user" : "kai" }
{ "_id" : ObjectId("4fd20d79931bd9b6138172f8"), "age" : 2, "user" : "may" }

我们发现对所有的文档中user:may的文档进行了age +1。操作。