我很想知道在Mongoose查询中不使用.lean()的好处是什么。Mongoose响应中的额外开销实际上允许您做什么?
我发现,除非在查询上使用.lean()方法,否则很难将文档作为对象返回。
我是不是遗漏了什么?在我的应用程序中使用Mongoose文档之前,我是否会因为剥离Mongoose文档而失去大量未开发的好处?
发布于 2018-08-23 06:55:05
我还没有完全测试过,但是这个ARTICLE BY SAKSHI TYAGI很好地比较了不使用.lean()方法和使用.lean()方法的mongoose查询的执行时间,清楚地表明不使用它的查询几乎是使用.lean()方法的3倍。文章将此归因于.lean()方法只返回一个javascript对象的事实,通过这样做,所有的"moongoose魔术“以及方法(包括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上找到上面的信息,因为它引用了“这是高性能只读场景中的一个很好的选择,特别是在与流结合的时候。”
https://stackoverflow.com/questions/51964874
复制相似问题