MongoDB 聚合与猫鼬虚拟
MongoDB aggregation vs Mongoose virtuals
从 我了解到 mongoose 围绕 MongoDB 创建了一个框架,它以不同的方式进行一些查询。
我读过 populate virtuals。当您可以使用它们来获得所需的结果时,它们相对于 MongoDB 聚合有哪些优势和劣势?什么时候应该使用一个而不是另一个?
猫鼬:
是围绕 MongoDB 的一个非常好的框架,它使得使用 MongoDB 变得容易,因为大多数事情都是由 Mongoose 在内部管理的。 Populate Virtuals 是框架的一部分,然后将允许您在驱动程序级别解决基本的实体关系。
聚合框架:
是一个更高级的功能,您可以将其视为一种查询语言(实际上是),您可以在其中创建在数据库级别解析的基本、中等、高级查询(这在性能方面存在巨大差异)。您不仅可以使用 $lookup 来“获取”一些数据,还可以过滤数据或按某个键进行分组。虚拟无法做到的事情。
总的来说,您可以将聚合框架视为一种非常干净且可扩展的方式来编写面向性能的查询MongoDB,因为整个管道在DB 级别 而不是驱动程序级别。
注意:
聚合表达式也可以用作 findAndModify 更新管道的一部分,这意味着您可以使用管道计算查找和更新数据(虚拟无法做到这一点)。
注意:
即将发布的 MongoDB 4.4 版本还将在 find() 中引入聚合表达式,这使得聚合语法成为编写查询的一项很好的投资。
从
我读过 populate virtuals。当您可以使用它们来获得所需的结果时,它们相对于 MongoDB 聚合有哪些优势和劣势?什么时候应该使用一个而不是另一个?
猫鼬: 是围绕 MongoDB 的一个非常好的框架,它使得使用 MongoDB 变得容易,因为大多数事情都是由 Mongoose 在内部管理的。 Populate Virtuals 是框架的一部分,然后将允许您在驱动程序级别解决基本的实体关系。
聚合框架: 是一个更高级的功能,您可以将其视为一种查询语言(实际上是),您可以在其中创建在数据库级别解析的基本、中等、高级查询(这在性能方面存在巨大差异)。您不仅可以使用 $lookup 来“获取”一些数据,还可以过滤数据或按某个键进行分组。虚拟无法做到的事情。
总的来说,您可以将聚合框架视为一种非常干净且可扩展的方式来编写面向性能的查询MongoDB,因为整个管道在DB 级别 而不是驱动程序级别。
注意: 聚合表达式也可以用作 findAndModify 更新管道的一部分,这意味着您可以使用管道计算查找和更新数据(虚拟无法做到这一点)。
注意: 即将发布的 MongoDB 4.4 版本还将在 find() 中引入聚合表达式,这使得聚合语法成为编写查询的一项很好的投资。