MongoDB三 之 Array Object 的特殊操作
相比關系型數據庫, Array [1,2,3,4,5] 和 Object { ‘name‘:‘DragonFire‘ } 是MongoDB 比較特殊的類型了
特殊在哪裏呢?在他們的操作上又有什麽需要註意的呢?
那我們先建立一條數據,包含 Array 和 Object 類型
db.Oldboy.insert({"name":"路飛學城-騎士計劃","price":[19800,19500,19000,18800],"other":{"start":"2018年8月1日","start_time":"08:30","count":150}})
{ "_id" : ObjectId("5b17d01a49bf137b585df891"), "name" : "路飛學城-騎士計劃", "price" : [ 19800, 19500, 19000, 18800 ], "other" : { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 } }
好的,這條數據已經完成了
針對這條數據我們進行一系列的操作,並講解使用方式
一.Array
1.把price 中 19000 改為 19300
db.Oldboy.update({"name":"路飛學城-騎士計劃"},{$set:{"price.2":19300}})
我們用了引用下標的方法更改了數值 , "price.2"代指的是 Array 中第3個元素
2. 混合用法
如果 price.1 中小於19800 則加 200
db.Oldboy.update({"name":"路飛學城-騎士計劃","price.1":{$lt:19800}},{$inc:{"price.1":200}})
把 price 小於 19500 的 自動補上 200
db.Oldboy.updateMany({"name":"路飛學城-騎士計劃","price":{$lt:19500}},{$inc:{"price.$":200}})
細心的同學已經發現了,只改了第一個,是的 $ 這個只儲存一個下標,批量更改的話,嘻嘻嘻嘻截至2017年1月1日,MongoDB沒有這個功能
你只要把這個Array 拿出來,在程序裏面改完,原方不動的放回去不就搞定了嗎
二.Object
這裏像字典,但是這裏更像是 JavaScript 中的 Object 對象
1.把other中 count 改為 199
db.Oldboy.update({"name":"路飛學城-騎士計劃"},{$set:{"other.count":199}})
對了就是在這個對象 打點兒 key 就可以更改數值了 , 要註意的是, 咱們用的 $set 進行修改的,那麽就意味著,如果沒有"other.count"這個field的話,他會自動創建
這個用法就到這裏了,下面我們玩兒個更深的
2.混合用法
如果 count 小於 200 那麽 加 10
三. Array + Object 的用法
首先,要先建立一條 Document
{ "_id" : ObjectId("5b17de9d44280738145722b9"), "name" : "路飛學城-騎士計劃", "price" : [ { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 }, { "start" : "2018年8月2日", "start_time" : "09:30", "count" : 160 }, { "start" : "2018年8月3日", "start_time" : "10:30", "count" : 170 }, { "start" : "2018年8月4日", "start_time" : "11:30", "count" : 180 } ] }
1.把count 大於 175 的field 加 15
混搭完成:
db.Oldboy.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})
2. 把 count 大於 180 的 start 改為 "2018年8月10日"
MongoDB三 之 Array Object 的特殊操作