1. 程式人生 > >MongoDB三 之 Array Object 的特殊操作

MongoDB三 之 Array Object 的特殊操作

blog 圖片 other 使用方式 細心 成了 start mon href

相比關系型數據庫, 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 的特殊操作