我在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不支持加入,所以甚至可以进行这样的查询吗?
答案 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及其设计模式的主要批评之一,但仍需要进行仔细考虑。