我很想知道在猫鼬查询中不使用.lean()
有什么好处。猫鼬响应中的额外开销实际上允许您做什么?
除非我在查询上使用.lean()
方法,否则我发现将文档作为对象返回变得非常困难。
我想念什么吗?通过在应用程序中使用Mongoose文档之前将它们剥离掉,我是否会损失掉大量的未开发利益?
答案 0 :(得分:0)
我还没有完全测试过,但是此ARTICLE BY SAKSHI TYAGI在比较使用和不使用.lean()
方法的猫鼬查询的执行时间方面做得很好,该方法清楚地表明,不使用猫鼬查询的执行时间几乎是使用{ .lean()
方法。文章将其归因于这样一个事实,即.lean()
方法仅返回一个javascript对象,并这样做去除了所有“笨拙的魔术”以及方法(包括save等)和getter / setter方法。
我一方面会说,这有助于在将响应轻松地发送给用户之前,快速向返回对象添加新字段;
.then(result=>{
result.something = "another thing";
return res.json(result);
})
请注意,没有.lean()
的查询不会返回javascript对象,因此您需要先将结果转换为javascript对象,然后再使用语法向该对象添加新字段甚至删除,如下所示;
.then(result=>{
result = result.toObject();
delete result.something;
return res.json(result);
})
您可以在此mongoose doc page上找到以上支持的信息,因为它引用了“这在高性能只读方案中,尤其是与流结合使用时,这是一个不错的选择。”