您好,登錄后才能下訂單哦!
本篇文章為大家展示了MONGODB 中怎么嵌套數組,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
例如:我們舉個例子,一對少
如我們有一個客戶,他的地址信息,一般來說不是房哥,房嫂的情況下,一個人得房產信息,一個手的手指頭就夠了。所以我這里定義為 一對少的關系。
{
name: 'super_man',
id:'109838973',
addresses:[
{city:'北京',district:'朝陽區',street:'xcecdieei'},
{city:'上海',district:'虹橋區',street:'werdfsrew'}
]
}
首先我們先明確兩點,任何設計都有優點,和缺點,這一般都是并存的,沒有說我的設計十全十美,這里為什么要使用數組,原因是查詢的時候,可以一并帶出地址信息,而地址信息一般不會是直接單獨作為查詢條件來進行查詢的。
一句話:這樣的設計不必單獨查詢來獲取嵌入的信息,但無法將嵌入的細節作為獨立的實體訪問。
而一對多的例子可以我們可以假設,我們有一個銷售系統,我們里面有很多老客戶的信息,而每次他們訂購產品也都是組團進行購買,每個產品需要有購買產品的客戶信息。
我們可以建議一個collection 來存儲客戶的信息
同時在建立一個訂購產品的 collection ,將訂購某個產品的用戶信息存儲在一個 document 中
上面就是一個處理一對多的MONGODB 中的一種設計方法,這樣設計的好處是,他們都作為一個獨立的文檔,可以更快的更新,但每次查詢就需要兩步來走,而不是通過一個查詢就可以獲得所要的數據,例如要某個訂單的所有客戶的地址信息。
個人領會,MONGODB collection 的設計,要考慮后期的查詢便利性和數據更改的便利性,太復雜的多層嵌套數組,是不利于MONGODB 的查詢和分析的。
我們以 mongodb 3.6 作為一個錨點,
我們先不考慮那種設計更好,我們先根據一個已經成型的設計來看看(以下信息來自于一個成熟的第三方接口返回的信息,部分敏感數據已經更改或覆蓋),這樣的設計給數據的 UDPATE 和 Find 帶來的是什么,然后我們就可以知道,那樣的設計更適合某些場景。
我們下面有這樣一個文檔,我們想更改queryConditions 里面的name 為yesyesyes 的記錄,改為nono
我們使用下面的語句來進行相關的更改,這里涉及了 MONGODB 里面關于數組的 $ 占位符。
db.py_queryfraud.update(
{"documentno":"130532199001108012","data.cisReport.queryConditions.$.name":"yesyesyes"},
{$set:{"data.cisReport.0.queryConditions.$.name":"nono"}})
我們可以看到人,第一個符號條件的嵌套數組的name 值已經更改為我們指定的,而其他的值name 的值還都是yesyesyes
而使用通配符,也是有場景限制的
1 使用upsert 操作中是不允許有 $ 符號的
2 位置$操作符不能用于遍歷多個數組的查詢,例如遍歷嵌套在其他數組中的數組的查詢,因為$占位符的替換是單個值
3 當與$unset操作符一起使用時,位置$操作符不會從數組中刪除匹配的元素,而是將其設置為null。
4 如果查詢使用否定運算符(如$ne、$not或$nin)匹配數組,則不能使用位置運算符從該數組更新值。但是,如果查詢的否定部分位于$elemMatch表達式中,則可以使用位置操作符更新該字段。
上述內容就是MONGODB 中怎么嵌套數組,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。