MongoDB $lookup与Mongoose populate的区别

18

我看到了这个和其他类似的问题,但没有解答我的问题。

我在阅读mongoose文档时发现:

MongoDB版本>=3.2中有类似连接的$lookup聚合操作符。Mongoose则提供了一个更强大的替代工具,称为populate(),可以让您引用其他集合中的文档。

populate()在mongoose中是如何工作的?它相比MongoDB的$lookup更强大在哪里呢?

mongoose不是帮助nodejs用户与mongodb一起使用的工具吗?如果是这样,mongoose怎么会拥有MongoDB没有的功能,例如populate()呢?

mongoose的populate()方法是否在幕后使用MongoDB的$lookup呢?


1
https://github.com/Automattic/mongoose/issues/3683#issuecomment-334025713 - Orelsanpls
2
谢谢提供链接。我已经阅读了整个帖子,现在我知道mongoose的populate()方法不是在后台使用MongoDB的$lookup。 我也已经明白,populate方法会进行多次数据库查询以填充数据。我还看到,在获取文档数组时,populate()速度更快。但是为什么有人想要populate()使用$lookup呢? - YulePale
1
让populate在幕后使用$lookup将允许人们使用.populate()语法而不是$aggregation。如果您需要$lookup性能,则必须在此时使用$aggregation。此外,如果mongoose使用mongodb中可用的内容而不是执行自己的“框架”函数,那么会更好。 - Orelsanpls
1
@GrégoryNEUT 我在同一主题上提出了另一个类似的问题,请看一下。谢谢。 - YulePale
1个回答

16

感谢Grégory NEUT在问题评论中分享的github讨论帖,我已经确认了一些事实:

  1. Mongoose的populate()方法并不使用MongoDB的$lookup。它只是向数据库发出另一个查询。
  2. Mongoose没有比MongoDB更强大的功能。populate()只是发起了两个或多个查询。

mongoose中的populate()方法如何工作,使其比MongoDB的$lookup更强大?

我认为,在某些情况下可以使用populate()方法,而在其他情况下可以使用$lookup。对于更复杂的查询,最好使用聚合管道中的$lookup。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接