我如何防止野鹅中的字段更新

时间:2018-11-06 07:05:15

标签: node.js mongodb mongoose

我有一个看起来像这样的模式:

"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包含将要更新的数据 问题是我不希望人们更新电子邮件字段。

所以我的问题是:

如何锁定电子邮件字段,使其不被更新。有没有一种方法可以将其锁定在架构中,以便只能在最初添加它,而以后不能更新?

谢谢。

2 个答案:

答案 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)

  

没有阻止更新的功能

     

您可以通过从email中删除body个对象来完成

delete req.body.email;
const customer =  await Customer.findOneAndUpdate({_id : req.params.id}, req.body);