我有两个巨大的(几十万个记录)集合Col1
和Col2
,我需要从这两个集合中获取联接数据。有一个连接标准可以让我大大减少返回到几百个的记录数,所以在SQL语言中我会运行类似
SELECT ... FROM Col1 INNER JOIN Col2 ON Col1.field1 = Col2.field2
并且它会非常快,因为Col1.field1
和Col2.field2
是索引字段。有没有直接的方法或解决办法在MongoDb中使用索引快速执行相同的操作,而不是扫描所有项目?
注意:我无法重新设计集合以将它们合并为一个。
答案 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/