2014-04-01 181 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中,正如您所提到的那样,您无法进行连接,因此无法在单个查询中获取输出。该查询仅在单个集合上执行。唯一可能的方法是从两个集合中分别获取它,然后将其合并到代码中。