mongodb交叉集合查询

时间:2014-04-01 01:43:58

标签: mongodb

我在MongoDB中有两个集合,一个是展示位置,另一个是tids。

展示位置集合包含program_id,placement_id,tids集合包含placement_id和tid_id。

我希望能够找到program_id为3,5的所有展示位置,然后使用这些placement_id找到tids集合中的所有tid_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不支持加入,所以甚至可以进行这样的查询吗?

2 个答案:

答案 0 :(得分:0)

在Mongo中,正如您所提到的,您无法进行连接,因此无法在单个查询中获取输出。查询仅在单个集合上执行。唯一可能的方法是从集合中单独获取它,然后将其合并到您的代码中。

答案 1 :(得分:0)

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

1)但是关于“数百万条记录和慢速循环”的注释,你可以使用索引,它不应该那么慢: (a)在展示位置集合上 - 放置program_id的索引,以便您可以轻松地进行搜索 (b)一旦提取了这些展示位置,请创建其placementIds的java列表 (c)关于tids collecton - 放置placementIds的索引,并在查询中运行$(在上面加上placementIds)

2)或者,请考虑上面的Asya Kamsky的评论,在mongo中,这是一种非常规化/汇总数据的常见做法,例如:如果它的1:很多(不是很多:很多)可能比聚合的“放置”文档更像     放置:{       ID:..       数据...       TIDS:          {tid 1 info ...},          {tid 2 info ...},       ] } .Beware:非规范化数据可能难以维护,这是对mongo及其设计模式的主要批评之一,但仍需要进行仔细考虑。