我有一个看起来像这样的模式:
"use strict"
const mongoose = require('mongoose');
const timestamp = require('mongoose-timestamp');
const CustomerSchema = new mongoose.Schema({
name : {
type : String,
required : true,
trim : true
},
email : {
type : String,
required : true,
trim : true
},
balance : {
type : Number ,
default : 0
}
})
//use timestamps to add created at and updated at
CustomerSchema.plugin(timestamp);
const Customer = mongoose.model('Customer',CustomerSchema);
module.exports = Customer;
当我想运行更新时,我运行这段代码
const Customer = require('../models/Customer');
const customer = await Customer.findOneAndUpdate({_id : req.params.id}, req.body);
因此req.body
包含将要更新的数据
问题是我不希望人们更新电子邮件字段。
所以我的问题是:
如何锁定电子邮件字段,使其不被更新。有没有一种方法可以将其锁定在架构中,以便只能在最初添加它,而以后不能更新?
谢谢。
答案 0 :(得分:3)
您可以在模式级别定义一个属性,称为immutable
。
文档参考:https://mongoosejs.com/docs/api/schematype.html#schematype_SchemaType-immutable
因此您的架构应如下所示:
const CustomerSchema = new mongoose.Schema({
name : {
type : String,
required : true,
trim : true
},
email : {
type : String,
required : true,
trim : true,
immutable: true // ADD THIS PROPERTY HERE
},
balance : {
type : Number ,
default : 0
}
}
答案 1 :(得分:1)
没有阻止更新的功能
您可以通过从
body
个对象来完成
delete req.body.email;
const customer = await Customer.findOneAndUpdate({_id : req.params.id}, req.body);