【Mongodb】更新文档
【语法】
1 2 3 4 5 6 7 8 9 |
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) |
Parameter | Type | Description |
---|---|---|
query | document | update的查询条件,类似sql update查询内where条件。 |
update | document | update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 |
upsert | boolean | 可选,这个参数的意思是,如果不存在update的记录,是否插入该文档,true为插入,默认是false,不插入。 |
multi | boolean | 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 |
writeConcern | document | 可选,抛出异常的级别。 |
1:更新已存在的文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 集合当前数据情况 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi" } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "daguo" } > # 将name为zhaosi的文档的age更新为50 > db.t.update({"name" : "zhaosi"},{$set:{"age" : 50}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > # 验证 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "daguo" } > |
2:验证multi参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# 将“daguo”改为“zhaosi” > db.t.update({"name" : "daguo"},{$set:{"name" : "zhaosi"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > # 此时集合中已经存在两个name为zhaosi的文档 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi" } > # 更新zhaosi,将sex置为1 > db.t.update({"name" : "zhaosi"},{$set:{"sex" : 1}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > # 验证结果我们会发现,只将第一个zhaosi的sex更新了,原因是默认情况下multi为false > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50, "sex" : 1 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi" } > # 再次执行更新zhaosi命令,将sex置为0,指定multi为true > db.t.update({"name" : "zhaosi"},{$set:{"sex" : 0}},{multi:true}) WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) > # 验证结果,两条zhaosi均已更新 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi", "sex" : 0 } > |
3:验证upsert参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 继续用集合t来做测试 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi", "sex" : 0 } > # 更新name为ml的文档,通过返回的信息也可以看出来,集合中并没有name为ml的文档,且未更新 > db.t.update({"name" : "ml"},{$set:{"sex" : 0}}) WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 }) > # 通过检索进行确认 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi", "sex" : 0 } > # 使用upsert参数,默认情况下为false,此处指定为true > db.t.update({"name" : "ml"},{$set:{"sex" : 0}},{upsert : true}) WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("598179bf33eff8385847b994") }) > # 验证,确认name为ml的文档已插入集合 > db.t.find() { "_id" : ObjectId("59814679c566b07b8733e777"), "name" : "zhangsan", "age" : 25, "sex" : 0 } { "_id" : ObjectId("598164a5c566b07b8733e778"), "name" : "lisi", "age" : 22, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e779"), "name" : "zhaosi", "age" : 50, "sex" : 0 } { "_id" : ObjectId("59816629c566b07b8733e77a"), "name" : "liuneng" } { "_id" : ObjectId("59816629c566b07b8733e77b"), "name" : "zhaosi", "sex" : 0 } { "_id" : ObjectId("598179bf33eff8385847b994"), "name" : "ml", "sex" : 0 } > |