执行findOneAndUpdate()时忽略了Mongoose小写标志

时间:2017-06-27 05:48:52

标签: node.js mongoose

我想将文档中的某些字段存储为小写字符。因此,我创建了一个类似

的模式
let body = new Schema({
    id: { type: Number, unique: true },
    group_name: { type: String, lowercase: true },
    type_name: { type: String, lowercase: true },
    full_spectral_class: { type: String, lowercase: true },
    spectral_class: { type: String, lowercase: true },
    spectral_sub_class: { type: String, lowercase: true },
    luminosity_class: { type: String, lowercase: true },
    luminosity_sub_class: { type: String, lowercase: true }
})

当我使用save()插入值时,所有值都将存储为小写字符串。但是当我尝试使用findOneAndUpdate()进行更新时,值将按原样获取。我宁愿不要手动将所有字段转换为小写字母,因为有相当多样的字段和模式遵循相同的样式。

1 个答案:

答案 0 :(得分:2)

您必须将runSettersOnQuery设置为true

const options = { upsert: true, runSettersOnQuery : true };
await yourModel.findOneAndUpdate(searchCriteria, newSetOfValues, options);

互联网上的样本很少,但也许你可以从mongoose docs找到这个样本。