我想将文档中的某些字段存储为小写字符。因此,我创建了一个类似
的模式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()
进行更新时,值将按原样获取。我宁愿不要手动将所有字段转换为小写字母,因为有相当多样的字段和模式遵循相同的样式。
答案 0 :(得分:2)
您必须将runSettersOnQuery
设置为true
。
const options = { upsert: true, runSettersOnQuery : true };
await yourModel.findOneAndUpdate(searchCriteria, newSetOfValues, options);
互联网上的样本很少,但也许你可以从mongoose docs找到这个样本。