MongoDB 聚合与 Mongoose 虚拟

Posted

技术标签:

【中文标题】MongoDB 聚合与 Mongoose 虚拟【英文标题】:MongoDB aggregation vs Mongoose virtuals 【发布时间】:2020-10-14 23:10:01 【问题描述】:

从this post 我了解到 mongoose 围绕 MongoDB 创建了一个框架,它以不同的方式执行其中一些查询。

我读过populate virtuals。当您可以使用它们来获得所需的结果时,它们与 MongoDB 聚合相比有哪些优点和缺点?什么时候应该使用一个而不是另一个?

【问题讨论】:

【参考方案1】:

猫鼬: 是一个非常好的围绕 MongoDB 的框架,可以轻松地使用 MongoDB,因为大多数事情都是由 Mongoose 内部管理的。填充虚拟是框架的一部分,然后将允许您在驱动程序级别解决基本的实体关系。

聚合框架: 是一个更高级的功能,您可以将其视为一种查询语言(实际上是这样),您可以在其中创建在 DB 级别解析的基本、中等、高级查询(这在性能方面存在巨大差异)。您不仅可以使用 $lookup “获取”一些数据,还可以通过某个键过滤数据或分组。虚拟机无法做到的事情。

一般来说,您可以将聚合框架视为在 MongoDB 中编写面向性能查询的一种非常简洁且可扩展的方式,因为整个管道都在 DB 级别解决而不是驱动级别。

注意: 聚合表达式也可以用作 findAndModify 更新管道的一部分,这意味着您可以使用管道计算查找并更新数据(这是虚拟机无法做到的)。

注意: 即将发布的 MongoDB 4.4 版本还将在 find() 中引入聚合表达式,这使得聚合语法成为编写查询的良好投资。

【讨论】:

以上是关于MongoDB 聚合与 Mongoose 虚拟的主要内容,如果未能解决你的问题,请参考以下文章

$match mongodb聚合框架_mongoose中的多条件[重复]

MongoDB/Mongoose - 与 geoNear 和子文档的聚合

Mongoose 添加到 MongoDB 的基本功能?

Mongodb匹配聚合不适用于日期

与 mongoDb 和 mongoose 聚合后填充单个 ObjectId 引用

mongoDB (mongoose增删改查聚合索引连接备份与恢复监控等等)