mongodb更新文档(document)

语法

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 })

原文出处:/show_1IX1eX7dHAbn.html