MongoDB使用$ lookup聚合运算符进行分片

时间:2016-01-06 12:24:41

标签: mongodb left-join aggregation-framework sharding

$lookup是MongoDB 3.2中的新功能。它对同一数据库中的未整数集合执行左外连接,以便从“已连接”集合中过滤文档以进行处理。

要使用$lookup,无法对from集合进行分片。

另一方面,分片是一种有用的水平缩放方法。

一起使用它们的最佳做法是什么?

2 个答案:

答案 0 :(得分:19)

正如您引用的文档所示,您不能在分片集合中使用$lookup。因此,最佳实践解决方法是在单独的查询中自行执行查找。

  1. 执行aggregate查询。
  2. 将查询结果中的“localField”值拉入数组,可能使用Array#map
  3. 使用find
  4. 之类的查询对“from”集合执行{foreignField: {$in: localFieldArray}}次查询
  5. 将您的结果合并为您需要的任何格式。
  6. 不要让$lookup限制阻止您对需要它进行可伸缩性的集合进行分片,只需自己执行查找功能。

答案 1 :(得分:0)

如 MongoDb 文档中提到的“在 $lookup 阶段,无法对 from 集合进行分片。但是,可以对运行了aggregate() 方法的集合进行分片”https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

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

这是一起使用它们的最佳做法