MONGODB中怎么嵌套數(shù)組

本篇文章為大家展示了MongoDB 中怎么嵌套數(shù)組,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),太平企業(yè)網(wǎng)站建設(shè),太平品牌網(wǎng)站建設(shè),網(wǎng)站定制,太平網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,太平網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

例如:我們舉個(gè)例子,一對(duì)少 

如我們有一個(gè)客戶,他的地址信息,一般來說不是房哥,房嫂的情況下,一個(gè)人得房產(chǎn)信息,一個(gè)手的手指頭就夠了。所以我這里定義為 一對(duì)少的關(guān)系。

{  

name: 'super_man',

id:'109838973',

addresses:[

{city:'北京',district:'朝陽區(qū)',street:'xcecdieei'},

{city:'上海',district:'虹橋區(qū)',street:'werdfsrew'}

]

}

首先我們先明確兩點(diǎn),任何設(shè)計(jì)都有優(yōu)點(diǎn),和缺點(diǎn),這一般都是并存的,沒有說我的設(shè)計(jì)十全十美,這里為什么要使用數(shù)組,原因是查詢的時(shí)候,可以一并帶出地址信息,而地址信息一般不會(huì)是直接單獨(dú)作為查詢條件來進(jìn)行查詢的。

一句話:這樣的設(shè)計(jì)不必單獨(dú)查詢來獲取嵌入的信息,但無法將嵌入的細(xì)節(jié)作為獨(dú)立的實(shí)體訪問。

而一對(duì)多的例子可以我們可以假設(shè),我們有一個(gè)銷售系統(tǒng),我們里面有很多老客戶的信息,而每次他們訂購(gòu)產(chǎn)品也都是組團(tuán)進(jìn)行購(gòu)買,每個(gè)產(chǎn)品需要有購(gòu)買產(chǎn)品的客戶信息。

我們可以建議一個(gè)collection 來存儲(chǔ)客戶的信息

MONGODB 中怎么嵌套數(shù)組

同時(shí)在建立一個(gè)訂購(gòu)產(chǎn)品的 collection  ,將訂購(gòu)某個(gè)產(chǎn)品的用戶信息存儲(chǔ)在一個(gè) document 中

MONGODB 中怎么嵌套數(shù)組

上面就是一個(gè)處理一對(duì)多的MONGODB 中的一種設(shè)計(jì)方法,這樣設(shè)計(jì)的好處是,他們都作為一個(gè)獨(dú)立的文檔,可以更快的更新,但每次查詢就需要兩步來走,而不是通過一個(gè)查詢就可以獲得所要的數(shù)據(jù),例如要某個(gè)訂單的所有客戶的地址信息。

個(gè)人領(lǐng)會(huì),MONGODB collection 的設(shè)計(jì),要考慮后期的查詢便利性和數(shù)據(jù)更改的便利性,太復(fù)雜的多層嵌套數(shù)組,是不利于MONGODB 的查詢和分析的。

我們以 mongodb 3.6  作為一個(gè)錨點(diǎn),

我們先不考慮那種設(shè)計(jì)更好,我們先根據(jù)一個(gè)已經(jīng)成型的設(shè)計(jì)來看看(以下信息來自于一個(gè)成熟的第三方接口返回的信息,部分敏感數(shù)據(jù)已經(jīng)更改或覆蓋),這樣的設(shè)計(jì)給數(shù)據(jù)的 UDPATE 和 Find 帶來的是什么,然后我們就可以知道,那樣的設(shè)計(jì)更適合某些場(chǎng)景。

我們下面有這樣一個(gè)文檔,我們想更改queryConditions  里面的name 為yesyesyes 的記錄,改為nono

MONGODB 中怎么嵌套數(shù)組

我們使用下面的語句來進(jìn)行相關(guān)的更改,這里涉及了 MONGODB 里面關(guān)于數(shù)組的 $ 占位符。

db.py_queryfraud.update(

  {"documentno":"130532199001108012","data.cisReport.queryConditions.$.name":"yesyesyes"},

  {$set:{"data.cisReport.0.queryConditions.$.name":"nono"}})

我們可以看到人,第一個(gè)符號(hào)條件的嵌套數(shù)組的name 值已經(jīng)更改為我們指定的,而其他的值name 的值還都是yesyesyes

MONGODB 中怎么嵌套數(shù)組

而使用通配符,也是有場(chǎng)景限制的

1 使用upsert 操作中是不允許有 $ 符號(hào)的

2 位置$操作符不能用于遍歷多個(gè)數(shù)組的查詢,例如遍歷嵌套在其他數(shù)組中的數(shù)組的查詢,因?yàn)?占位符的替換是單個(gè)值

3 當(dāng)與$unset操作符一起使用時(shí),位置$操作符不會(huì)從數(shù)組中刪除匹配的元素,而是將其設(shè)置為null。

4 如果查詢使用否定運(yùn)算符(如$ne、$not或$nin)匹配數(shù)組,則不能使用位置運(yùn)算符從該數(shù)組更新值。但是,如果查詢的否定部分位于$elemMatch表達(dá)式中,則可以使用位置操作符更新該字段。

上述內(nèi)容就是MONGODB 中怎么嵌套數(shù)組,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:MONGODB中怎么嵌套數(shù)組
本文地址:http://muchs.cn/article42/ipjdhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、App設(shè)計(jì)網(wǎng)站收錄、網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化