2016-11-16 80 views
0

我有這3 MongoDB的集合的MongoDB查詢:如何使關係集合之間3

client_results

[ 
'resultId':1, 
'clientId':'client00', 
], 
[ 
'resultId':2, 
'clientId':'client00', 
], 

結果

[ 
'id':1, 
'siteID':5 
], 
[ 
'id':2, 
'siteID':6 
] 

網站

[ 
'id':5, 
'language':'ar' 
], 
[ 
'id':6, 
'language':'en' 
] 

我怎麼可以得到client_result s where results.site.language ='en'? 在MySQL查詢會喜歡這樣的:

select cr.id, cr.clientId from client_results cr 
left join results r 
    on r.id = cr.resultId 
left join site s 
    on s.id = r.siteID 
where s.language = 'en'; 

但在MongoDB中我怎樣才能使這個查詢?

感謝

+0

請將您迄今嘗試過的內容添加到帖子中。 – Veeram

+0

MongoDB版本?如果是3.2,請使用['$ lookup'](https://docs.mongodb.com/v3.2/reference/operator/aggregation/lookup/)嘗試一些內容並告訴我們你的卡在哪裏? – styvane

+0

感謝Styvane ..我堅持「我怎麼可以把條件放在$ lookup中」,我需要的結果是site.language等於'en'。 – ehab

回答

0

MongoDB中也沒有太大忙亂做連接,如MongoDB的並不意味着做連接,後面的MongoDB的主要想法是把所有你需要在一個文檔中,但也有一定的侷限性,我們不能把整個其他文件放在另一個文件中,無論如何這裏是你的答案,$看起來像左邊的外部連接,但是這個解決方案中的問題是在那裏,我已經解開第一張表來加入另一個,在這種情況下,如果沒有第一次加入,沒有第二次加入, 您可以使用一個$ project階段,並在其中放置一個_id變量,與它一起玩,您將得到期望的結果

db.client_results.aggregate([ 
          {"$lookup" : 
          { 
           from : results, 
           localField : resultId, 
           foreignField: id, 
           as : "resultTable" 
          } 
          }, 
         {"$unwind" : "$resultTable"}, 
         {"$lookup" : 
         { 
          from : sites, 
          localField : "resultTable.siteID", 
          foreignField: id, 
          as : "siteTable" 
         } 
         }, 
         {"$unwind" : "$siteTable"}, 
         {$match : {"siteTable.language" : "en"}} // <-- only en language 
         ]) 
+0

非常感謝#Parshuram,這很好,但沒有條件,有沒有辦法像「site.language = en」這樣的條件,我的意思是我只需要結果,網站語言是'恩'...再次感謝 – ehab

+0

檢查我更新的答案 –

+0

許多很多很多謝謝,它的工作 – ehab