MongoDB 修改器
对文档中的某些字段进行更新
$inc
专门用来增加(或减少)数字的,只能用于整数,长整数或双精度浮点型的值$inc
键的值必须为数字,不能使用字符串,数组或其他非数字的值
如果键不存在,则创建它
1 |
db.user.update({}, {"$inc":{"age":1}}); |
$set
用来指定一个字段的值, 字段不存在则创建.
1 |
db.user.update({},{"$set":{"name":"mike"}}) |
$set
也可以用于改变键的类型
1 |
db.user.update({}, {"$set":{"name":["mike","wang"]}}) |
unset
用于删除一个键
1 |
db.user.update({},{"$unset":{"age":1}}) |
数组修改器
$push
如果数组已存在,添加元素到数组末尾,否则创建它
1 |
db.blog.update({}, {"$push":{"authors":"mike"}}) |
使用$each
添加多个值
1 |
db.blog.update({},{"$push":{"authors":{"$each":["mike", "wang"]}}}) |
限制数组的最大长度 ‘$slice’, 只包含最后加入的限制长度的元素,必须为负整数,$slice
相对于在文档中创建了一个队列
1 |
db.blog.update( |
$sort
对数组中的所有对象进行排序
1 |
db.blog.update( |
$slice
, $sort
必须配合 $each
与 $push
使用
$addToSet
保证数组中的元素不重复
1 |
db.user.update({},{"$addToSet":{"name":"mike"}}) |
与$each
组合添加多个元素
1 |
db.user.update({},{"$addToSet":{"name":{"$each":["mike", "wang"]}}}) |
$pop
从数组中删除元素,此时数组相当于队列或栈,只能从一端删除
1 |
// 从头部删除 |
$pull
删除所有匹配的文档
1 |
db.user.update({},{"pull":{"name": "mike"}}) |
数组操作符必须作用于包含数组值的键
基于位置的数组修改器
数组下标(从0开始)
1 |
db.blog.update({}, {"set":{"comments.0.name": "mike"}) |
## 定位操作符 $
1 |
db.blog.update( |
定位操作符只更新第一个匹配的元素
upsert
如果没有找到匹配的文档,那么以查询条件和更新文档为基础创建新的文档;找到则正常更新update
的第三个参数表示这是个upsert
1 |
db.user.update( |
setOnInsert
在创建文档时创建字段并赋值, 在更新的时候不做任何改变
1 |
db.user.update( |
更新多个文档, 指定update
的第四个参数为 true
findAndModify 返回被更新的文档
1 |
db.user.findAndModify({ |
update
和 remove
有且只有一个, 能与findAndModify
一起使用的字段有:
-
query
查询文档的条件 -
sort
排序的条件 -
update
文档更新 -
remove
删除文档,布尔类型 -
new
表示返回更新前还是更新后的文档,布尔类型,默认false, 更新前的文档 -
fields
文档中需要返回的字段 -
upsert
true为upsert, 默认false
转自http://wangming1993.github.io/2015/12/15/mongo-modifier/