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日"

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM