在關(guān)系型數(shù)據(jù)庫(kù)中,通過連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表聯(lián)合查詢。而非關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn)是表之間屬于弱關(guān)聯(lián),Mongodb作為Nosql代表,其本身特性不建議對(duì)多Collection關(guān)聯(lián)處理,不過對(duì)于有些需要對(duì)多表關(guān)聯(lián)處理的需求,Mongodb也可以實(shí)現(xiàn)。主要分為兩種方式:簡(jiǎn)單手工關(guān)聯(lián)和DBRef方式關(guān)聯(lián)
?
1.簡(jiǎn)單手工關(guān)聯(lián)
下圖表示帖子和用戶兩個(gè)Collection的ER圖:
首先將authors集合中的用戶對(duì)象查詢出來,放在一個(gè)變量author中,代碼如下:
> author=db.authors.findOne({name:"chenzhou"}) { "_id" : ObjectId("5030ba7621bdee44765b2147"), "name" : "chenzhou", "email" : "chenzhou1025@126.com" }
通過用戶對(duì)象author來獲取帖子列表,代碼如下:
> for(var post=db.posts.find({"author_name":author.name}); post.hasNext();){ ... printjson(post.next().title); ... } "Hello Mongodb" "Hello World" "Hello My Friend"
2.DBRef方式關(guān)聯(lián)
DBRef就是在兩個(gè)Collection之間定義的一個(gè)關(guān)聯(lián)關(guān)系,比如,把CollectionB "_id"列的值存在CollectionA的一個(gè)列中,然后通過CollectionA這個(gè)列中所存的值在CollectionB中找到相應(yīng)的記錄。
示例:模擬用戶發(fā)帖的過程,看一看如何將帖子表和用戶表建立關(guān)聯(lián)。
步驟1:取得當(dāng)前用戶信息,代碼如下:
> author=db.authors.find({name:"chenzhou"})[0] { "_id" : ObjectId("5030ba7621bdee44765b2147"), "name" : "chenzhou", "email" : "chenzhou1025@126.com" }
步驟2:發(fā)帖子并做關(guān)聯(lián),代碼如下:?
> db.posts.insert({"title":"Hello Mongodb DBRef1", ... authors:[new DBRef('authors',author._id)]}) > db.posts.insert({"title":"Hello Mongodb DBRef2", ... authors:[new DBRef('authors',author._id)]}) >
步驟3:通知帖子查找用戶信息,代碼如下:
> db.posts.find({"title":"Hello Mongodb DBRef1"})[0].authors[0].fetch() { "_id" : ObjectId("5030ba7621bdee44765b2147"), "name" : "chenzhou", "email" : "chenzhou1025@126.com" }
通過這個(gè)例子可以看出,DBRef就是從文檔的一個(gè)屬性指向另一個(gè)文檔的指針。
關(guān)于DBRef詳細(xì)信息,可以參見官網(wǎng)說明: http://docs.mongodb.org/manual/applications/database-references/ ??
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
