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/