国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

MongoDB一對多關系建模

來源:懂視網 責編:小采 時間:2020-11-09 15:02:57
文檔

MongoDB一對多關系建模

MongoDB一對多關系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn
推薦度:
導讀MongoDB一對多關系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn

本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1?mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVnM7zYDBceEJhqyQJxPr3FLdcN0tJuRhTrCw%3D%3D 備注:本譯文不

本篇博客翻譯自:

http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1?mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVnM7zYDBceEJhqyQJxPr3FLdcN0tJuRhTrCw%3D%3D

備注:本譯文不是嚴格意義上的翻譯,只是在基于對該原文的理解之上,盡可能表達清楚。如有疑問或不妥,請參考原文。

很多剛從傳統SQL開發轉向MongoDB開發的朋友都會問到一個問題:如何用MongoDB表達傳統關系數據庫中的一對多(1 to n)關系?

基于MongoDB豐富的表達力,我們不能說我們必須采用一個標準的方法來進行1 to n的建模。稍后我們從3個具體場景來展開講解。

首先,我們將1 to n中的n進行場景細化。這個n究竟代表多大的量級呢?是幾個到幾十個?還是幾個到幾千個?還是成千上萬個?

1) 1 to n(n代表好幾個,或幾十個,反正不太多)

比如每個Person會有多個Address。此種情況下,我們采用最簡單的嵌入式文檔來建模。

{ name: 'Kate Monster', id: '123-456-7890', addresses : [ { street: '123 Sesame St', city: 'Anytown', cc: 'USA' }, { street: '123 Avenue Q', city: 'New York', cc: 'USA' } ]}
這種建模的方式包含了顯而易見的優點和缺點:

優點:你不需要執行單獨的查詢就可以獲得某個Person的所有Address信息。

缺點:你無法像操作獨立文檔那樣來操作Address信息。你必須首先操作(比如查詢)Person文檔后,才有可能繼續操作Address。

在本實例中,我們不需要對Address進行獨立的操作,且Address信息只有在關聯到某一個具體Person后才有意義。所以結論是:采用這種embedded(嵌入式)建模是非常適合Person-Address場景的。

2)1 to n(n代表好些個,比如幾十個,甚至幾百個)

比如產品(Product)和零部件(part),每個產品會有很多個零部件。這種場景下,我們可以采用引用方式來建模,如下:

零部件(Part):{ _id : ObjectID('AAAA'), partno : '123-aff-456', name : '#4 grommet', qty: 94, cost: 0.94, price: 3.99}
產品(Product):
{ name : 'left-handed smoke shifter', manufacturer : 'Acme Corp', catalog_number: 1234, parts : [ // array of references to Part documents ObjectID('AAAA'), // reference to the #4 grommet above ObjectID('F17C'), // reference to a different Part ObjectID('D2AA'), // etc ]}

首先每個part作為單獨的文檔存在。每個產品中包含一個數組類型字段(parts),這個數組中存放的是所有該產品包含的零部件的編號(_id主鍵)。當你需要根據某一個產品編號查詢該產品包含的所有部件信息時,你可以執行以下操作:

> product = db.products.findOne({catalog_number: 1234}); // Fetch all the Parts that are linked to this Product> product_parts = db.parts.find({_id: { $in : product.parts } } ).toArray() ;
這種建模方式的優缺點也非常明顯:

優點:部件是作為獨立文檔(document)存在的,你可以對某一部件進行獨立的操作,比如查詢或更新。

缺點:如上,你必須通過兩次查詢才能找到某一個產品所屬的所有部件信息。

在本例中,這個缺點是可以接受的,本身實現起來也不難。而且,通過這種建模,你可以輕易的將1 to n擴展到n to n,即一個產品可以包含多個部件,同時一個部件也可以被多個產品所引用(即同一部件可以被多個產品使用)。

3)1 to n(這個n代表很大的數值,比如成千上萬,甚至更大)

比如,每一個機器(host)會產生很大數量的日志信息(logmsg)。在這種情況下,如果你采用嵌入式建模,則一個host文檔會非常龐大,從而輕易超過MongoDB的文檔大小限制,所以不可行。如果你采用第二中方式建模,用數組來存放所有logmsg的_id值,這種方式同樣不可行,因為當日止很多時,即使單單引用objectId也會輕易超過文檔大小限制。所以此時,我們采用以下方式:

機器(hosts):{ _id : ObjectID('AAAB'), name : 'goofy.example.com', ipaddr : '127.66.66.66'} 日志(logmsg):{ time : ISODate("2014-03-28T09:42:41.382Z"), message : 'cpu is on fire!', host: ObjectID('AAAB') // Reference to the Host document}
我們在logsmg中,存放對host的_id引用即可。

綜上所述,在對1 to n關系建模時,我們需要考慮:

1)n代表的數量級很小,且n代表的實體不需要單獨操作時,可以采用嵌入式建模。

2)n代表的數量級比較大,或者n代表的實體需要單獨進行操作時,采用在1中用Array存放引用的方式建模。

3)n代表的數量級非常大時,我們沒有選擇,只能在n端添加一個引用到1端。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MongoDB一對多關系建模

MongoDB一對多關系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn
推薦度:
標簽: 博客 關系 建模
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 免费中文字幕一级毛片 | 一级免费毛片 | 一级毛片视频播放 | 免费国产线观看免费观看 | 久久久久女人精品毛片九一 | 日韩专区一区 | 超级毛片 | 欧美日韩亚洲高清不卡一区二区三区 | 亚洲一区二区三区高清 | 欧美日韩亚洲v在线观看 | 天堂精品高清1区2区3区 | 国内精品一级毛片免费看 | 亚洲精品影院久久久久久 | 亚洲日韩欧美综合 | 亚洲国产成人久久 | 国产成人精品视频一区二区不卡 | 日韩福利在线 | 国产精品专区第二 | 欧美视频网站在线观看 | 国产网站免费看 | 91网红福利精品区一区二 | 精品久久综合一区二区 | 欧美日韩 在线播放 | 精品国产免费一区二区三区五区 | 91一区二区三区 | 国产三级小视频 | 伊人久久亚洲综合天堂 | 一区精品在线 | 免费国产va在线观看视频 | 国内偷自第一二三区 | 国产欧美va欧美vahd | 一区二区免费播放 | 一区精品在线 | 欧美日韩国产片 | 国产精品免费播放 | 青青国产成人久久91网 | 欧美成人亚洲国产精品 | 欧美高清视频一区 | 91网红福利精品区一区二 | 视频在线观看国产 | 精品一区二区三 |