Mongodb mongo db交叉集合查询

Mongodb mongo db交叉集合查询,mongodb,Mongodb,我在MongoDB有两个收藏,一个是placements,另一个是TID Placements集合具有程序id、placement id,tids集合具有placement id和tid id 我希望能够找到程序id为3,5的所有位置,然后在tids集合中找到所有具有这些位置id的tid,因此在SQL中它将是: select tids.tid_id from tids inner join placements where tids.placement_id = placements.pl

我在MongoDB有两个收藏,一个是placements,另一个是TID

Placements集合具有程序id、placement id,tids集合具有placement id和tid id

我希望能够找到程序id为3,5的所有位置,然后在tids集合中找到所有具有这些位置id的tid,因此在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不支持join,所以有可能进行这样的查询吗

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

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

1但是关于你关于数百万条记录和慢循环的笔记,你可以使用索引,它不应该那么慢: 在Placements集合中放置程序id的索引,这样您就可以方便地通过它进行搜索 b提取这些位置后,制作一个其位置ID的java列表 c On tids collecton-放置placementID的索引,并使用上面提取的placementID运行$in查询

<P>2,请考虑上面的Asya Kamsky的评论,在蒙哥,它有一种常见的做法去对数据进行反汇编/聚合,例如,如果它的1:很多不多:很多,也许比聚集的“放置”文档更像。 安置:{ 身份证件:。。 数据 工业贸易署:[ {tid 1 info…}, {tid 2 info…}, ] }
。注意:非规范化数据可能很难维护,这是对mongo及其设计模式的主要批评之一,但仍然需要仔细考虑。

需要在mongodb中查询两次,一次在placements上,一次在tids上。您只能在收集级别进行查询。根据数据的不同,在内存中加载较小的集合,然后开始使用您选择的编码语言进行查询可能会更容易。问题是这两个集合中都有数百万条记录,我使用mongoDB java客户端,使用循环非常慢,而且占用内存,如果我可以委托mongdb查询,这将非常有效,因为您的模式与您的用例不太匹配。