MongoDB 修改文档操作
- 语法 db.collection.update(query,update,upsert,multi)
- 功能: 更新一个文档数据
- query参数,定位要更新的数据,相当于SQL中的where子句;
- update参数:将要更新的数据,相当于SQL中的set内容;
- upsert参数:默认为false,当query未找到文档时,则无法修改,为true时,则插入对应文档
- multi参数:默认为false,当query找到多个文档时,则只更新第一条,为true,则全部更新
1、upsert参数
取值 | 说明 |
---|
false | 默认值,当query条件未找到指定的文档时,则不进行修改 |
true | 当query条件未找到指定的文档时,则自动添加该条文档 |
db.py.update(
{model:"mate 20"},
{$set:{price:5000}},
false,
)
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 1 })
db.py.update(
{model:"mate 21"},
{$set:{price:5000}},
true,
)
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5cb6c2a534a564e112504860")
})
2、multi参数
取值 | 说明 |
---|
false | 默认值,当query条件找到多个文档时,则只更新第一条 |
true | 当query条件找到多个文档时,则全部修改 |
db.py.update(
{model:"mate 20"},
{$set:{price:5500}},
false,
false
)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.py.update(
{model:"mate 20"},
{$set:{price:5500}},
false,
true
)
WriteResult({ "nMatched" : 6, "nUpserted" : 0, "nModified" : 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"}}
)
db.py.update(
{model:"mate 20"},
{$unset:{brand:1}}
)
db.py.update(
{model:"mate 20"},
{$rename:{price:"jiage"}}
)
db.py.update(
{model:"mate 20"},
{$inc:{price:1}}
)
db.py.update(
{model:"mate 20"},
{$inc:{price:1}}
)
db.py.update(
{model:"mate 20"},
{$min:{price: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"]}}
)
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}}
)