1.$inc,增加或删除,在键不存在时,也能创建。只能用于整数,长整数,双精度浮点数。不能是字符串,数组,
或其他非数字。
db.dbname.update({"url":"www.example.com"},{"$inc":{"pageviews":1}})
访问页面的次数+1
2.$set,用来指定一个键的值,如果这个键不存在,则创建他。
db.dbname.update({"_id":ObjectId("xxxxxxxxx")},{"$set":{"favorite book":"war and peace"}})
如果用户喜欢的是另外一本书
db.dbname.update({"name":"joe"},{"$set":{"favorite book":"other"}})
还可以修改键的类型
db.dbname.update({"name":"joe"},{"$set":{"favorite book":["book1","book2","book3"]}})
改为了数组类型。
还可以用$unset将键完全删除
db.dbname.update({"name":"joe"},{"$unset":{"favorite book":1}})
删除了favaorite键
修改内嵌文档
db.dbname.update({"name":"joe"},{"$set":{"author.name:"joe schmoe"}})
3.$push数组修改器。如果指定的键已存在,会向已有的数组末尾插入一个元素。要是不存在,就会创建一个新
的数组。
db.dbname.update({"title":"a blog post"},{"$push":{"comments":{"name":"joe","email":"com.mail"}}})
如果一个值不在数组里,就把他加进去。可以用“$ne”来实现。
db.dbname.update({"authors cited":{"$ne":"Richie"}},{"$push":{"author cited:"Richie"}})
也可以用$addToSet完成一样的工作。
$addToSet能避免重复
db.dbname.update({"_id":ObjectId("XXXXXXX")},{"$addToSet":{"emails":"joe@hotmail.com"}})
还能跟$each组合添加多个不同的值
db.dbname.update({"_id":ObjectId("XXXXXXX")},
{"$addToSet":{"emails":{"$each":["joe1@hotmail.com","joe2@hotmail.com","joe3@hotmail.com"]}}})
4.$pop从数组中删除元素。
{$pop:{key:1}}从数组末尾删除一个
{$pop:{key:-1}}从数组开头删除一个
$pull能够根据具体条件删除,可以将所以匹配的都删掉
db.lists.update({},{"todo":"laundry"})
5.数组的定位修改
db.blog.update({"post":post_id},{"$inc":{"comments.0.votes":1}})将第一个的投票数量+1
还可以用$定位
db.blog.update({"name":jone},{"$set":{"comments.$.votes":1}})将姓名为jone的的投票数量+1
6.upsert是一种特殊的更新。如果没有文档满足条件,就以条件和跟新文档为基础,创建一个新的 文档
如果有匹配的文档,就正常跟新。
db.math.update({"count":25},{"$inc":{"count":3}},true)
7.save文档不存在时插入,存在时更新。