$lookup
是MongoDB 3.2中的新增功能。它对同一数据库中的未加注集合执行左外部联接,以过滤“已加入”集合中的文档进行处理。
要使用$lookup
,from
集合不能被分割。
另一方面,分片是一种有用的水平缩放方法。
一起使用它们的最佳做法是什么?
$lookup
是MongoDB 3.2中的新增功能。它对同一数据库中的未加注集合执行左外部联接,以过滤“已加入”集合中的文档进行处理。
要使用$lookup
,from
集合不能被分割。
另一方面,分片是一种有用的水平缩放方法。
一起使用它们的最佳做法是什么?
正如您引用的文档所指出的,您不能在分片集合上使用$lookup
。所以最佳实践解决方法是在独立查询中自己执行查找。
aggregate
查询。Array#map
。{foreignField: {$in: localFieldArray}}
find
查询将您的结果合并为任何您需要的格式。不要让$lookup
限制阻止您从需要扩展性的分片集合中自行执行查找功能。
因此,目前'$ lookup'是相当有限的? –
我不会那么远;它仍然是一个强大的工具,因为能够从服务器端提取引用数据的能力仍然非常有用。但是,无法从分片收集中提取数据是一个关键限制。 – JohnnyHK
$ lookup阶段需要在数据库的主分片上运行。由于“from”集合也不分片,因此它位于同一台服务器上,并且可以在本地执行连接。你应该避免连接不同的机器。这是NoSQL ;-)我可以想象没有好的解决方案。你想在应用程序中迭代结果还是想存储它?在第一种情况下,也许你必须在每个文档的循环中查找操作。在第二种情况下,您可以使用MapReduce:http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/ – yoooshi