4

我有两个巨大的(几十万条记录)集合Col1Col2,我需要从它们中获取连接数据。有一个连接条件可以让我将返回的记录数显着减少到几百个,所以在 SQL 语言中我会运行类似的东西

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

它会运行得非常快,Col1.field1并且Col2.field2是索引字段。是否有任何直接的方法或解决方法可以在使用索引的 MongoDb 中快速执行相同的操作,而不是扫描所有项目?

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

4

3 回答 3

4

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

您可以在 2 个查询中执行连接客户端,也可以通过执行 map-reduce 并生成第三个集合以非实时方式执行此操作。

参考this other question有关如何进行map-reduce的详细信息

于 2012-09-24T00:13:00.070 回答
3

为了加入 MongoDb 4.2,您可以使用聚合和 $lookup 如下查询:

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

对我有用

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

于 2020-05-03T09:56:17.257 回答
0

joinMongoDB中的太贵了。2个解决方案:

  • 重新设计将它们合并为一个
  • limit,match在你加入之前
于 2021-12-30T02:31:04.263 回答