MongoDB 之 Array Object 的特殊操做 MongoDB - 6

相比關係型數據庫, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比較特殊的類型了數據庫

特殊在哪裏呢?在他們的操做上又有什麼須要注意的呢?學習

那咱們先創建一條數據,包含 Array 和 Object 類型spa

db.Oldboy.insert({"name":"路飛學城-騎士計劃","price":[19800,19500,19000,18800],"other":{"start":"2018年8月1日","start_time":"08:30","count":150}})3d

{ "_id" : ObjectId("5b17d01a49bf137b585df891"), "name" : "路飛學城-騎士計劃", "price" : [ 19800, 19500, 19000, ], "other" : { "start" : "2018年8月1日", "start_time" : "08:30", "count" : 150 } }

好的,這條數據已經完成了code

針對這條數據咱們進行一系列的操做,並講解使用方式對象

一.Array 小秀一波blog

1.把price 中 19000 改成 19300ip

db.Oldboy.update({"name":"路飛學城-騎士計劃"},{$set:{"price.2":19300}})class

咱們用了引用下標的方法更改了數值 , "price.2"代指的是 Array 中第3個元素date

 

2. 混合用法

若是 price.1 中小於19800 則加 200

db.Oldboy.update({"name":"路飛學城-騎士計劃","price.1":{$lt:19800}},{$inc:{"price.1":200}})

複習一下:"price.1":{$lt:19800} 是查找 price.1 小於 19800

複習兩下:{$inc:{"price.1":200}} 是什麼啊? 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

這麼玩兒完了以後,條件位置的打點兒調用,也嘗試過了

Object的用法就這麼多了

 

三. Array + Object 的用法 告訴大家,這個老High了

首先,咱們要先創建一條 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 } ] }

insert的代碼要本身寫哦,學完一直沒怎麼練習過,Document添加完成以後

1.把count 大於 175 的field  加 15

混搭完成:

db.Oldboy.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})

分析一下咱們的代碼:

{"price.count":{$gt:175}}, price 明明是個 Array 啊 怎麼就直接 打點兒 count 了呢 這裏要知道price 打點兒 就是從內部的Object 中找到 count 小於 175 的結果

{$inc:{"price.$.count":15}} ,  這裏就比較好理解了,price裏面第 $ (大於175的第一個) 個元素中 count 增長 15

咱們要學會觸類旁通 $set 若是忘了, 就再來一個例子吧

 

2. 把 count 大於 180 的 start 改成 "2018年8月10日"

相關文章
相關標籤/搜索