mongodb 学习笔记 2 --- 修改器
修改器是為了愛update文檔時(shí),不需要傳入整個(gè)文檔就能修改當(dāng)前文檔的某個(gè)屬性值,修改器用法如下:
假設(shè)數(shù)據(jù)庫(kù)中foo集合中存在如下文檔:{"name":"jack","age":18}
db.foo.update({"name":"jack"},{"$inc":{"age":2}});? //這是一個(gè)修改器用法舉例
則更新后的文檔變?yōu)?#xff1a;{"name":"jack","age":20}
下面將介紹如下修改器:
1.$set : 用來(lái)指定一個(gè)字段的值,如果該字段不存在則創(chuàng)建它。修改內(nèi)嵌文檔時(shí)支持 {"$set":{"author.name":"jack"}}的寫法,即使author字段不存在也可以;
2.$unset: 用來(lái)刪除一個(gè)字段,使用方法如下:db.foo.update({"name":"jack"},{"$unset":{"age":0}})? ?不管unset的鍵值對(duì)中值為false 還是為0、null,只要寫了就會(huì)刪除;
3.$inc:用來(lái)增加/減少已有鍵值,如果該鍵不存在就創(chuàng)建一個(gè);只能增加數(shù)字值。數(shù)字值的字符串也不行。相應(yīng)的減少傳負(fù)值就可以了;
4.$push: 用來(lái)向數(shù)組中push一條數(shù)據(jù),如果該數(shù)組不存在則創(chuàng)建。
? ? ? ? ? ? ?子操作符:?$each 子操作符配合使用,如 {"$push":{"list":{"$each":[1,2,3]}}} , push后的數(shù)據(jù)為:{"list":[1,2,3]}? ?如果不用$each,則變?yōu)?{"list":[[1,2,3]]}?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?$slice? 限制push數(shù)組的長(zhǎng)度,負(fù)數(shù)從后往前數(shù),正數(shù)從前往后數(shù),如{"$push":{"list":{"$each":[1,2,3],"$slice":-2}}},數(shù)據(jù)變?yōu)?{"list":[2,3]} 。 如原有數(shù)據(jù){"list":[[1,2,3]]} ,此時(shí){"$push":{"list":{"$each":[4,5,6],"$slice":-2}}},變?yōu)閧"list":[[5,6]]},可見數(shù)據(jù)的截取范圍是根據(jù)整體數(shù)據(jù)數(shù)組而言的
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?$sort? ?根據(jù)排序規(guī)則進(jìn)行數(shù)組排序,-1 為降序,1為升序
? ? ? ? ? ? 以上的$slice 和 $sort必須和$push $each共同使用?
5.$ne : not equal ,在篩選條件時(shí)表示屬性值不等于、或不包含該值,可用于update及find? 如 db.foo.find({"list":{"$ne":2}})?
6.$addToSet: 在向數(shù)組中push值時(shí)可以避免重復(fù),用法和$push 相同,不過(guò)子操作符只能用$each
7.$pop: 從數(shù)組中刪除一個(gè)元素,?{"$pop":{"list":1}}? 從后往前刪除,?{"$pop":{"list":-1}} 從前往后刪除? 無(wú)論list后面這個(gè)值傳的幾,都只刪除1個(gè)
8.$pull: 從數(shù)組中刪除指定的值?{"$pull":{"list":2}}? 如果里面的相同的值有多個(gè),則都刪除
9.$:數(shù)組下標(biāo)占位符,使用方法:比如元數(shù)據(jù)為 {comments:[{name:"jim",votes:0},{name:'mary',votes:1}]}? 進(jìn)行如下更新操作:db.foo.update({"comments.name":"mary"},{"$set":{"commnets.$.votes":3}})? 如匹配條件有多個(gè),只更新第一個(gè)
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/JhoneLee/p/9199372.html
總結(jié)
以上是生活随笔為你收集整理的mongodb 学习笔记 2 --- 修改器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7777端口的问题
- 下一篇: 推荐: 五分钟搞懂Xen、KVM、Qem