update相关修改器命令
$set:用来指定一个键值对,如果存在就进行修改,不存在就添加
db.user.update({name:"hello"},{$set:{field:value}})
$inc:指定对应的键值进行数字上的加减操作,只针对值为数值的键有效
db.user.update({name:"hello"},{$inc:{age:2}})
$unset:删除指定的键
db.user.update({name:"hello"},{$unset:{field:1}})
$push:追加或创建新的数组元素
db.user.update({name:"hello"},{$push:{"hobby":"football"}})
之前文档中不存在数组字段就创建,存在就添加football元素
如果hobby存在但不是数组类型,会报错Cannot apply $push/$pushAll modifier to non-array
push操作不会检查数组中元素是否重复,如果需要将不重复的数据加入数组,需要使用$addToSet
$addToSet:指定数组列中存在此元素就不操作,不存在就添加
db.user.update({name:"hello"},{$addToSet:{"hobby":"football"}})
$pushAll:用法和push类似,可以批量添加数组元素到指定字段
db.user.update({name:"hello"},{$pushAll:{"hobby":["football","book"]}})
$pop:从指定的数组字段删除一个值,1删除最后一个值,即最数组最右边的,-1删除第一个元素,最左边的
db.user.update({name:"hello"},{$pop:{"hobby":1}}),以上例为例则hobby中book被删
$pull:删除一个指定的数值
db.user.update({name:"hello"},{$pull:{"hobby":"book"}})
删除hobby中的book元素
$pullAll:一次性删除多个指定的值
db.user.update({name:"hello"},{$pull:{"hobby":["book","footbook"]}})
$定位器
如有文档如下:
{name:"xiaowang",books:[{"type":"js","publish":2017},
{"type":"mongodb","publish":2017},
{"type":"mongodb","publish":2016}]}
把type为mongodb的文档都加上一个作者名,就可以使用如下命令
db.user.update({"books.type":"mongodb"},{$set:{"books.$.author":"iaknehc"}})