语法
db.集合名.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>
}
)
说明:
query:document类型,根据该条件进行更新,相当于 sql语句中 update where后面的部分。可以使用与
find()方法中相同的查询语法。
在3.0版中进行了更改:当使用upsert:true执行update()时,如果查询使用点表示法在_id字段上指定条件,则 MongoDB 将拒绝插入新文档update:要修改内容,相当于 sql语句中 update set后面的部分。该值可以是:包含更新运算符
upsert:boolean类型,可选。为
true,没有与查询条件匹配的文档时 插入 该文档;为false不会插入,默认值为false。multi:boolean 类型,可选。为
true,则更新符合查询条件的多个文档;为false,则更新一个文档。默认值为false。writeConcern :可选,抛出异常的级别
覆盖的修改
这种修改,会修改文档的整个内容,也就是说:更新后的内容,完全与 更新语句中的内容相同
不能修改指定的字段
只能修改匹配的第一条记录
一般使用较少
db.user.update( {uid:'1'}, {password:'111'} )
执行结果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
查询结果
db.user.find()
执行结果:
{ "_id" : ObjectId("610f839ca8189f38cb40dd56"), "password" : "111" }
也就是说,更新后的内容,完全与 更新语句中的内容相同,只有 password 字段和 主键
局部修改
可以避免 覆盖的修改,其功能与 sql中的update语句类似,只修改指定的字段
只能修改匹配的第一条记录
db.user.update( {uid:'2'}, {$set: {password:'111'} } )
执行结果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
结果说明:
- nMatched:匹配 1 条
- nModified:修改 1 条
查询结果
db.user.find()
执行结果:
{ "_id" : ObjectId("610f84dda8189f38cb40dd57"), "uid" : "1", "username" : "lilei", "password" : "111", "name" : "lilei", "sex" : "男", "age" : 20 }
只是修改 password 字段的值,其他字段值没变
批量的修改
可以修改 匹配的 所有记录
db.user.update( {username:'lilei'}, {$set: {password:'111111'} },{multi:true} )
执行结果:
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
结果说明:
- nMatched:匹配 3 条
- nModified:修改 3 条
列值增长的修改
让所有记录的 age 加1:
db.user.update({},{$inc:{age:NumberInt(1)}},{multi:true})
执行结果:
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 5 })