如何在MongoDb中有效加入2个庞大的集合?

时间:2012-09-24 00:00:09

标签: mongodb

我有两个巨大的(几十万个记录)集合Col1Col2,我需要从这两个集合中获取联接数据。有一个连接标准可以让我大大减少返回到几百个的记录数,所以在SQL语言中我会运行类似

 SELECT ... FROM Col1 INNER JOIN Col2 ON Col1.field1 = Col2.field2

并且它会非常快,因为Col1.field1Col2.field2是索引字段。有没有直接的方法或解决办法在MongoDb中使用索引快速执行相同的操作,而不是扫描所有项目?

注意:我无法重新设计集合以将它们合并为一个。

2 个答案:

答案 0 :(得分:3)

MongoDB没有JOIN,所以没有快速的等价物。它很可能是架构设计问题,但是你说你无法改变它。您无法在一个查询中查询多个集合。

您可以在2个查询中执行加入客户端,也可以通过执行map-reduce和生成第3个集合以非实时样式执行此操作。

参考this other question了解有关如何进行map-reduce

的详细信息

答案 1 :(得分:0)

要加入MongoDb 4.2,您可以使用聚合和$ lookup这样的查询:

db.collection.aggregate([
   { $lookup: { from: "...", ... } }
])

对我有用

更多信息:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/