mongodb更新的方法:
在查的基础之上,update就显的简单多了,
官方提供的修改的方法有:
db.collection.update()
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
除此之外还有以下方法:
db.collection.findOneAndReplace()
db.collection.findOneAndUpdate()
db.collection.findOneAndModify()
db.collection.save()
db.collection.bulkWrite()
默认的update()是使用指定新值替换的成一个新的文档,例如test集合中存在这个文档:{_id:1,name:"gy",addr:"shanghai"},
假如使用db.test.update({name:"gy"},{addr:"nantong"}),目的是想将name="gy"的数据找出来,将addr修改为"nantong",事实上经过操作,
该数据变为{ "_id" : 1, "addr" : "nantong" },除了_id,其余没出现的字段全部被移除了,想直接实现这个功能就只有将第二个参数换成一个完整文档了。
事实上,只需要加一个操作符就没那么麻烦了,更新后的语法为db.test.update({name:"gy"},{$set:{addr:"nantong"}})
update()方法第三个参数为upsert,值为false或true,upsert=update+insert,即找到对应数据,发生修改,找不到就插入。
除了$set还有
$inc,$currentDate,$min,$max,$mul,$rename,$setOnInsert(2.4的版本,即当发生未有满足条件插入新文档的时候,同时添加该字段和默认值。用作初始化数据的场景),$unset(删除)
除此之外,还有数组的修改操作符:
$,数组第一个元素,例如"array.$"代表array数组中的第一个元素
$addToSet,在该数组中添加不存在的值
$pop,值为-1或1对应移除该数组的第一个或最后一个元素
$pull,全都匹配才移除元素值
$pullAll,已弃用
$push,可向该数组重复添加值
$pushAll,移除任意匹配的元素值
以上操作符的修饰符,用来搭配操作符使用:
$each, 搭配$push和$addToSet使用
$position,指定添加元素在数组中的位置
$slice,指定$push操作影响数组的大小,比如原来数组上存在2个元素,$slice 值为3,限制$push最多向该数组添加一个数组元素
$sort,搭配$push使用,指定数组元素添加的顺序