Javascript 我如何告诉猫鼬不要保存一块地?

Javascript 我如何告诉猫鼬不要保存一块地?,javascript,mongodb,express,mongoose,Javascript,Mongodb,Express,Mongoose,如果age字段为空或未定义,如何告诉Mongoosenot保存该字段 或者我可以在Express中这样做吗 Express router.put('/edit/:id', function(req, res) { Person.findOneAndUpdate({ _id: req.params.id }, { name: req.body.updateData.name, age: req.body.updateData.age }, {

如果
age
字段为空或未定义,如何告诉Mongoosenot保存该字段 或者我可以在Express中这样做吗

Express

router.put('/edit/:id', function(req, res) {
    Person.findOneAndUpdate({ _id: req.params.id }, {
        name: req.body.updateData.name,
        age: req.body.updateData.age
       }, { new: true });
})
猫鼬模式

var PersonSchema = new Schema({
    name: { type: String},
    age: {type: String}
})
解释(如果你问我为什么需要这个)

我对
新人
编辑人
使用相同的html模板。当我创建一个新人时,如果我将
年龄
字段留空,Mongoose将只保存
姓名
字段。但是当我使用编辑模板时,Mongoose总是将
age
字段设置为null,即使该字段为空。我想不出任何方法来阻止此操作。

您可以在数据库更新之前管理请求数据,如:

router.put('/edit/:id', function(req, res) {
    let update = {name: req.body.updateData.name};
    if (req.body.updateData.age != "") {
        update.age = req.body.updateData.age;
    }
    Person.findOneAndUpdate({ _id: req.params.id }, update, { new: true });
})

@Aioros,你的回答给了我一个想法,但是我找到了这个解决方案来解决我的问题。我只是在将空的或未定义的对象元素发送到Mongoose之前删除它们。

let update = {
      name: req.body.updateData.name,
      age: req.body.updateData.age
     };

if (update.age === null || update.age === undefined) delete update.age

Person.findOneAndUpdate({ _id: req.params.id }, update, { new: true });