MongoDB 修改文档操作
- 语法 db.collection.update(query,update,upsert,multi)
- 功能: 更新一个文档数据
- query参数,定位要更新的数据,相当于SQL中的where子句;1
- update参数:将要更新的数据,相当于SQL中的set内容;
- upsert参数:默认为false,当query未找到文档时,则无法修改,为true时,则插入对应文档
- multi参数:默认为false,当query找到多个文档时,则只更新第一条,为true,则全部更新
1、upsert参数
取值 | 说明 |
false | 默认值,当query条件未找到指定的文档时,则不进行修改 |
true | 当query条件未找到指定的文档时,则自动添加该条文档 |
db.py.update(
{model:"mate 20"}, // query 参数
{$set:{price:5000}}, // update 参数
false, // 修改文档,查找到mate20的文档并将价格改为5000
)
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 1 }) //查找到5条,修改1条
db.py.update(
{model:"mate 21"},
{$set:{price:5000}},
true, // 未找到mate21的文档,则添加该条文档
)
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5cb6c2a534a564e112504860")
}) // 查找到0条,插入1条
2、multi参数
取值 | 说明 |
false | 默认值,当query条件找到多个文档时,则只更新第一条 |
true | 当query条件找到多个文档时,则全部修改 |
db.py.update(
{model:"mate 20"},
{$set:{price:5500}},
false,
false // 只修改第一条
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) // 查找到1条,修改1条
db.py.update(
{model:"mate 20"},
{$set:{price:5500}},
false,
true // 全部修改
)
WriteResult({ "nMatched" : 6, "nUpserted" : 0, "nModified" : 5 }) // 查找到6条,修改5条
3、update参数
修改器 | 说明 |
$set | 设置一个域的值或多个域的值,如果没有该域的话,则自动增加一个域 |
$unset | 删除一个域 |
$rename | 修改域的名称 |
$inc | 对某个域的值进行加减修改 |
$mul | 对某个域的值进行乘法修改 |
$min | 设定某个域的最小值,如果文档指定域的值小于min的值,则不修改,如果大于,则改为min的值 |
$max | 设定某个域的最大值,如果文档指定域的值小于max的值,则改为max的值,如果大于,则不修改 |
db.py.update(
{model:"mate 20"},
{$set:{price:3988, brand:"huawei"}} // 价格修改为3988,并增加品牌华为
)
db.py.update(
{model:"mate 20"},
{$unset:{brand:1}} // 删除品牌的域,brand后面设置任何数字,都是删除
)
db.py.update(
{model:"mate 20"},
{$rename:{price:"jiage"}} // 将price域的名称修改为jiage
)
db.py.update(
{model:"mate 20"},
{$inc:{price:1}} // 将mate20的价格加1,如果没有price这个域,则增加该域,值为1
)
db.py.update(
{model:"mate 20"},
{$inc:{price:1}} // 将mate20的价格加1,如果没有price这个域,则增加该域,值为1
)
db.py.update(
{model:"mate 20"},
{$min:{price:3800}} // 如果mate20的价格大于3800,则修改该域,即该域的最小值为3800
)
- 数组修改器
修改器 | 说明 |
$push | 向数组中添加一项 |
$pushAll | 向数组中添加多项元素,注意MongoDB3.6版本取消了这个修改器 |
$pull | 从数组中删除一项 |
$pullAll | 从数组中删除多项 |
$addToSet | 向数组中添加一项,如果原数组中有重复项,则不修改 |
db.py.update(
{model:"nova2"},
{$push:{CPU:"huawei"}} // 向数组中添加一项,如果没有该数组,则添加该数组
)
db.py.update(
{model:"nova2"},
{$pushAll:{CPU:["4核","内存8G"]}} // 向数组中添加多项,3.6以后的版本无法使用
)
db.py.update(
{model:"nova2"},
{$push:{CPU:{$each:["4核","内存8G"]}}} // 向数组中添加多项
)
db.py.update(
{model:"nova2"},
{$pull:{CPU:"huawei"}} // 向数组中删除一项
)
db.py.update(
{model:"nova2"},
{$pullAll:{CPU:["4核","内存8G"]}} // 向数组中删除多项
)
db.py.update(
{model:"nova2"},
{$pop:{CPU:-1}} // 从数组中弹出第一个元素,值为1时,弹出最后一个元素
)