MongoDB - 文档修改

222 阅读1分钟

MongDB中可以使用save()和update()更新文档,save()必须指定_id及其它所有字段和值,update()更为灵活。

1.update()语法

db.collection_name.update(
    查询条件,
    整个文档或修改器,
    upsert: 不存在匹配的文档时是否写入新文档,默认false(可选)
    multi: 是否更新匹配的全部文档,默认false,此参数为true时第二个参数必须使用修改器(可选)
)

2.update()修改器

其中第二个参数可以是完整文档,也可以是修改器。MongoDB中提供了多种修改器。

2.1 - $set:修改指定的字段和值

db.user.update({"name":"tom"},{$set:{"age":11,"sex":1}})

2.2 - $unset:去除指定的字段

db.user.update({"name":"tom"},{$unset:{"sex":1}})

2.3 - $inc:增加指定的数值(可以是负数)

db.user.update({"name":"tom"},{$inc:{age:-1}})

2.4 - $push:追加元素到数组中,如果字段部存在,会新增一个数组类型的字段

db.user.update({"name":"tom"},{$push:{role:4}})

2.5 - $pushAll:以数组作为参数追加多个元素

db.user.update({"name":"tom"},{$pushAll:{"role":[4,5,6]}})

2.6 - pull:删除数组中满足条件的元素

db.user.update({"name":"tom"},{$pull:{"role":6}})

2.7 - $addToSet:增加一个值到数组中,当该值已存在是,不会增加

db.user.update({"name":"tom"},{$addToSet:{"role":6}})

2.8 - $pop:删除数组中的最后一个(1)或第一个(-1)元素

db.user.update({"name":"tom"},{$pop:{"role":1}})
db.user.update({"name":"tom"},{$pop:{"role":-1}})

2.9 - $rename:修改字段名称

db.user.update({"name":"tom"},{$rename:{"role":"r"}})

2.10 - $bit:将字段值与给定的数值进行and(与)、or(或)、xor(异或)等运算

基本语法如下

{ $bit: { <field>: { <and|or|xor>: <int> } } }

更多内容可以查阅官方文档 docs.mongodb.com/manual/refe…

3.写操作异常级别

  • WriteConcern.NONE 无异常抛出
  • WriteConcern.NORMAL 仅抛出网络错误异常,没有服务器错误异常(默认)
  • WriteConcern.SAFE 抛出网络错误异常、服务器错误异常;并等待服务器完成写操作
  • WriteConcern.MAJORITY 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作
  • WriteConcern.FSYNC_SAFE 抛出网络错误异常、服务器错误异常;并等待服务器将写操作刷新到磁盘
  • WriteConcern.JOURNAL_SAFE 抛出网络错误异常、服务器错误异常;并等待服务器将写操作提交到磁盘的日志文件
  • WriteConcern.REPLICAS_SAFE 抛出网络错误异常、服务器错误异常;并等待至少2台服务器完成写操作`