Mongodb 猫鼬{$exists:false}不工作,为什么?

Mongodb 猫鼬{$exists:false}不工作,为什么?,mongodb,mongoose,Mongodb,Mongoose,我有以下疑问: const messageRules = await MessageRule.findOne({ reservationLength: {$exists: false} }); 在以下架构上: const MessageRule = new Schema( { ..., reservationLength: {type: Number, default: 1}, ... } ); 查询将返回一个包含以下内

我有以下疑问:

const messageRules = await MessageRule.findOne({
    reservationLength: {$exists: false}
});
在以下架构上:

const MessageRule = new Schema(
    {
        ...,
        reservationLength: {type: Number, default: 1},
        ...
    }
);
查询将返回一个包含以下内容的文档:

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

我快疯了。它是否与我的模式中的默认设置有关?还有其他想法吗?

这是一个我已经在猫鼬身上遇到过好几次的错误,我没有找到太多关于它的信息(当然我决定不浪费时间去探索它)

它与所有默认值字段一起出现,mongoose只是在返回调用中将这些值自动设置为默认值(如果您检查数据库中的实际文档,则不会设置此字段)

一个简单的解决方法是将lean()添加到调用中:

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

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

根据mongoose findOne()文档
注意:条件是可选的,如果条件为null或未定义,mongoose将向MongoDB发送一个空的findOne命令,该命令将返回任意文档
。但我在这里看不到这一点。你每次都收到相同的文件吗?