首页 > 解决方案 > Mongoose {$exists: false} 不工作,为什么?

问题描述

我有以下查询:

const messageRules = await MessageRule.findOne({
    reservationLength: {$exists: false}
});

在以下架构上:

const MessageRule = new Schema(
    {
        ...,
        reservationLength: {type: Number, default: 1},
        ...
    }
);

查询返回一个文档:

{
    ...,
    reservationLength: 1,
    ...
}

我要疯了。它与我的架构中的默认设置有关吗?还有其他想法吗?

标签: mongodbmongoose

解决方案


这是我已经多次遇到过 mongoose 的错误,但我没有找到太多关于它的信息(当然,我决定不浪费时间探索它)。

它发生在所有默认值的字段中,猫鼬只是在返回调用时自动将这些值设置为其默认值(如果您检查数据库中的实际文档,它将不会设置此字段)。

一种缓解紧张情绪的简单方法是在调用中添加lean():

const messageRules = await MessageRule.findOne({
    reservationLength: {$exists: false}
}).lean();

出于某种原因,这最终修复了错误(有争议的功能???)


推荐阅读