Mongoose水合物方法是否请求对数据库进行新的查询?

smdnsysy  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(94)

我有个关于 Mongoose 的问题。Model.hydrate(rawDoc)方法是否请求对数据库的新查询?我正在使用聚合方法来构建我的查询,我需要使用virtuals getter,因为聚合将返回一个普通对象JavaScript,所以我不能使用mongoose文档对象的任何特性示例(例如:虚拟、静态、方法、帮助器等)。我正在做的是通过使用hydrate()方法将从这个聚合返回的普通JavaScript对象转换为mongoose文档对象,但我想知道这种方式是否对数据库进行2次查询或仅进行一次查询?

const rawDocs = await Model.aggregate([...]);
const newDocs = rawDocs.map(doc => Model.hydrate(doc));

console.log(newDocs); // virtual fields are defined.
gwbalxhn

gwbalxhn1#

Mongoose .hydrate()只是一种从原始JS对象创建Mongoose文档的方法。我在这里。
创建文档,您可以根据需要访问方法,虚拟值,验证......但它不是从数据库中检索到的对象。
顺便说一下,根据定义,.hydrate().lean()相反,.lean()也不需要额外的调用,类似于new Model(),但最后一个可以触发任何DB查询(例如从钩子)。
因此,您不应该使用.hydrate()进行任何额外的DB调用。

相关问题