数据库的更新操作
1,update() 方法
update() 方法用于更新已存在的文档
语法:
db.collection.update(
<query>,//查询条件
<update>,//更新操作
{
upsert: <boolean>,//可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi: <boolean>,//可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern: <document>//抛出异常的级别。
}
)
例子:
>db.stus.update({name:'玉皇大帝'},{$set:{address:"南天门"}},{multi:true})
//$set是指定字段设置,如果没有,则会修改正整条数据
'DeprecationWarning: Collection.update() is deprecated. Use updateOne, updateMany or bulkWrite.'
//该方法已经过时
{ acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0 }
结果:
{"_id":{"$oid":"609f911d6f765a36017e2a36"},"name":"玉皇大帝","gender":"male","age":888,"address":"南天门"}
2,save() 方法
save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。
语法:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
例子:
>db.stus.save({
"_id" : ObjectId("123"),"name":"蜘蛛精","gender":"female","age":18,"address":"盘丝洞"
})
MongoshInvalidInputError: Collection.save() is deprecated. Use insertOne, insertMany, updateOne or updateMany.
//过时,直接报错,更新失败
3,updateOne()
updateOne() 向指定集合更新单个文档
语法:
db.collection.update(
<query>,//查询条件
<update>,//更新操作
)
例子:
>db.stus.updateOne({
name:'孙悟空'
},
{
$set:{name:'齐天大圣'}
})
{ acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0 }
结果:
{"_id":{"$oid":"609f906d6f765a36017e2a33"},"name":"齐天大圣","gender":"male","age":55,"address":"花果山"}
3,db.collection.updateMany()
updateMany() 向指定集合更新多个文档
语法:
db.stus.updateMany({条件},{修改})
例子:
>db.stus.updateMany({age:{$gt:45}},{$set:{age:66}})//$gt : 大于
{ acknowledged: true,
insertedId: null,
matchedCount: 3,
modifiedCount: 3,
upsertedCount: 0 }
结果:
>db.stus.find({age:{$gt:45}})
{ _id: ObjectId("609f906d6f765a36017e2a33"),
name: '齐天大圣',
gender: 'male',
age: 66,
address: '花果山' }
{ _id: ObjectId("609f911d6f765a36017e2a36"),
name: '玉皇大帝',
gender: 'male',
age: 66,
address: '南天门' }
{ _id: ObjectId("609f96456f765a36017e2a3b"),
name: '牛魔王',
gender: 'male',
age: 66,
address: '火焰山' }
4,移除集合中的键值对,使用的 $unset 操作符:
语法:
db.stus.update({条件},{ $unset: { <field1>: "", ... } })
例子:
>db.stus.updateOne({name:'玉皇大帝'},{$unset:{age:11}})
{ acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0 }
结果:
{"_id":{"$oid":"609f911d6f765a36017e2a36"},"name":"玉皇大帝","gender":"male","address":"南天门"}
补充:
WriteConcern异常类型
WriteConcern.NONE:没有异常抛出
WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。