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