2014-04-01 189 views
0

我在MongoDB中有兩個集合,一個是placements,另一個是tid。mongo db crosss集合查詢

展示位置集合具有program_id,placement_id,tids集合具有placement_id和tid_id。

我希望能夠找到與program_id所有展示位置爲3,5,然後找到TIDS集合中的所有tid_id與PLACEMENT_ID,所以在SQL這將是:

select tids.tid_id 
from tids 
inner join placements 
where tids.placement_id = placements.placement_id 
and placements.program_id = 3 or 5 

它說的MongoDB沒有按」 t支持連接,那麼甚至有可能做這樣的查詢?

+1

需要在mongodb中查詢兩次,其中一個在展示位置,一個在tid上。 – huocp

+0

您只能在集合級別進行查詢。取決於數據,將較小的集合加載到內存中然後開始以您選擇的編碼語言進行查詢可能會更容易。 – Matt

+0

問題是在這兩個集合中有數百萬條記錄,我使用mongoDB java客戶端,使用循環非常慢且耗費內存,如果我可以委託mongdb查詢,這將會非常有效 – user468587

回答

0

不幸的是我不能提供任何魔法,沒有加入。

1)但是關於您關於「數百萬條記錄和慢循環」的說明,您可以使用索引,它不應該太慢: (a)在Placements集合 - 放置program_id的索引,讓您(c)在提取這些展示位置後,製作一個他們的展示位置的java列表 (c)在tids collecton上放置一個placementIds索引,並運行一個$ in查詢(在上面放置placementIds)

2)或者,請考慮Asya Kamsky的上面的評論,在mongo中有一些常規實踐來反規範化/彙總數據,例如如果1:許多(不是很多:很多)或許比一個聚集 '安置' 的文件就像 位置:{ ID:.. 數據... TIDS:[{ TID 1個信息...},{ tid 2 info ...}, ] } 。注意:非規範化數據可能難以維護,這是對mongo及其設計模式的主要批評之一,但仍需要提出以供仔細考慮。

0

在Mongo中,正如您所提到的那樣,您無法進行連接,因此無法在單個查詢中獲取輸出。該查詢僅在單個集合上執行。唯一可能的方法是從兩個集合中分別獲取它,然後將其合併到代碼中。