【问题标题】:MongoDB aggregation vs Mongoose virtualsMongoDB 聚合与 Mongoose 虚拟
【发布时间】:2020-10-14 23:10:01
【问题描述】:
从this post 我了解到 mongoose 围绕 MongoDB 创建了一个框架,它以不同的方式执行其中一些查询。
我读过populate virtuals。当您可以使用它们来获得所需的结果时,它们与 MongoDB 聚合相比有哪些优点和缺点?什么时候应该使用一个而不是另一个?
【问题讨论】:
标签:
node.js
mongodb
mongoose
aggregation-framework
mongoose-populate
【解决方案1】:
猫鼬:
是一个非常好的围绕 MongoDB 的框架,可以轻松地使用 MongoDB,因为大多数事情都是由 Mongoose 内部管理的。填充虚拟是框架的一部分,然后将允许您在驱动程序级别解决基本的实体关系。
聚合框架:
是一个更高级的功能,您可以将其视为一种查询语言(实际上是这样),您可以在其中创建在 DB 级别解析的基本、中等、高级查询(这在性能方面存在巨大差异)。您不仅可以使用 $lookup “获取”一些数据,还可以通过某个键过滤数据或分组。虚拟机无法做到的事情。
一般来说,您可以将聚合框架视为在 MongoDB 中编写面向性能查询的一种非常简洁且可扩展的方式,因为整个管道都在 DB 级别解决而不是驱动级别。
注意:
聚合表达式也可以用作 findAndModify 更新管道的一部分,这意味着您可以使用管道计算查找并更新数据(这是虚拟机无法做到的)。
注意:
即将发布的 MongoDB 4.4 版本还将在 find() 中引入聚合表达式,这使得聚合语法成为编写查询的良好投资。