当前位置:首页 > PHP教程 > PHP总结归纳

mongodb修改器学习

1. 执行update相关操作都可以使用修改器. 2. 修改器是为了不整个大文档来替换修改, 而是修改局部 3. 详情: 3.1 $inc (自增) 为增加某个字段的数值 例子: 原文档如下: { "_id" : objectid("4b253b067525f35f94b60a31"), "url" : "www.example.com", "pageview

1. 执行update相关操作都可以使用修改器.
2. 修改器是为了不整个大文档来替换修改, 而是修改局部
3. 详情:
3.1 $inc (自增)
为增加某个字段的数值
例子:
原文档如下:

{ "_id" : objectid("4b253b067525f35f94b60a31"), "url" : "www.example.com", "pageviews" : 52 }

执行修改器 $inc
db.test.update({url:’www.example.com’},{$inc:{pageviews: 1}})
表示为pageviews这个 key 的值 加上1. 后面是对应要加上的值.
注意, $inc中, 字段对应的值只能是 数字. 但是可以是 正数也可以是负数. 如果是负数, 就是执行一个减法操作.
3.2 $set (设置)

修改某个字段的值为指定的值. 这里的修改是与字段类型无关的. 你可以把一个string修改成long或者一个对象都行.
例子:
原文档如下:

{ "_id" : objectid("4b253b067525f35f94b60a31"), "name" : "joe", "age" : 30, "sex" : "male", "location" : "wisconsin" }

修改性别, 变成false (string -> boolean)
执行修改器 $set

db.test.update({name:'joe'}, {$set:{sex:false}})

表示将 name为joe的这个对象的 sex修改为false
3.3 $unset (删除字段)
这个修改器是为了删除某个指定的字段及其值.
例子:
原文档如下:

{ "_id" : objectid("4f9105377522000000006be0"), "howlong" : 6, "loveperson" : "zhanying", "person" : "jiacheo" }

把howlong删除
执行修改器 $unset

db.test.update({person:'jiacheo'},{$unset:{howlong:1}})

后面的1没具体意义, 相当于确认
3.4 $push (把一个数据放到数组里面)
例子:
原文档如下:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "gongjin" ] }

执行修改器, 增加一个人到supporters里面

db.test.update({person:'jiacheo'},{$push:{supporters:'ziming'}})

这时候变成:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "gongjin", "ziming" ] }

若果再执行一遍上面的代码, 那么数组还是会加上同样的名称, 如果你需要排同, 可以用后面这个修改器
3.5 $addtoset (将一个对象放到集合里面. 集合里面不会出现两个重复的一模一样的对象)
例子:
原文档如下:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "gongjin", "ziming" ] }

执行修改器 $addtoset

db.test.update({person:'jiacheo'},{$addtoset:{supporters:'ziming'}})

文档内容没有改变..
以上两个修改器还可以配合 $each, 把一个数据里的数据append到另一个数组上去(后者会排重)
比如:

db.test.update({person:'jiacheo'}, {$addtoset:{supporters:{$each: ["gongjin","ziming","liuxun","feidu"] }}})

执行后, 结果如下:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : ["gongjin", "ziming", "feidu", "liuxun" ] }

3.6 $pop 队列出列 (按数组索引顺序出列(正序或者倒序))
例子:
原文档如下:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : ["gongjin", "ziming", "feidu", "liuxun" ] }

执行修改器 $pop

db.test.update({person:'jiacheo'},{$pop:{supporters:1}})

修改后变为

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "gongjin", "ziming", "feidu" ] }

value 值为1 表示数组索引靠后的先出列, 也就是后进先出, 相当于出栈的概念. value值为-1表示数组索引考前的先出列, 也就是先进先出, 相当于一个fifo的队列
3.7 $pull (符合条件的元素出列)
与上一个相比, 这个修改器会把符合条件的元素从数组中删除, 而不是简单的按照索引值的大小来处理.
原文档如下:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "gongjin", "ziming", "feidu" ] }

执行修改器 $pull

db.test.update({person:'jiacheo'},{$pull:{supporters: 'gongjin'}})

修改后:

{ "_id" : objectid("4f9105377522000000006be0"), "loveperson" : "zhanying", "person" : "jiacheo", "supporters" : [ "ziming", "feidu" ] }

可以见, gongjin从supporters中被remove掉了.
这里所有被匹配的元素都会被出列



【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!