为什么在猫鼬查询中排除.lean()?

时间:2018-08-22 10:30:46

标签: mongoose

我很想知道在猫鼬查询中不使用.lean()有什么好处。猫鼬响应中的额外开销实际上允许您做什么?

除非我在查询上使用.lean()方法,否则我发现将文档作为对象返回变得非常困难。

我想念什么吗?通过在应用程序中使用Mongoose文档之前将它们剥离掉,我是否会损失掉大量的未开发利益?

1 个答案:

答案 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上找到以上支持的信息,因为它引用了“这在高性能只读方案中,尤其是与流结合使用时,这是一个不错的选择。”