Mongodb / Mongoose: одно поле не будет обновляться пустой строкой

#node.js #mongodb #typescript #mongoose

#node.js #mongodb #машинопись #mongoose

Вопрос:

я новичок в MongoDB / Mongoose и у меня следующая проблема:

моя схема вложена в:

 profile: {
school: {type: String, required: false},
subject: {type: String, required: false}, 
graduation: {type: String, required: false}
}
  

теперь я хочу обновить школу, предмет и выпускной с помощью:

 userRouter.put('/:id', function(req, res, next){

  var updateObject = req.body;

 User.findByIdAndUpdate(req.params['id'], updateObject,{upsert: true}, (err, success)=> {
if(err)
  res.status(404).send(err);
     res.status(200).send();
  });
});
  

я знаю, что метод put заменяет объект, но метод patch не выполняется в моем коде. Теперь, когда я отправил:

 {"school": "", "subject": "c", "graduation": ""}
  

тема и выпуск будут перезаписаны, но школа не будет пустой — она содержит старый материал.

У вас есть решение? Спасибо.

Ответ №1:

Проверено, как эта школа и выпуск были изменены…

     let updateObject = {
        profile: {school: "", subject: "c", graduation: ""}
    };

    user.findByIdAndUpdate(
        req.params['id'],
        updateObject,
        {upsert: true},
        function(err, success) {
            if (err)
                res.status(404).send(err);
            res.status(200).send();
        }
    );
  

Используется эта схема тестирования:

 new mongoose.Schema({
    created: {type: Date, required: true, default: Date.now},
    modified: {type: Date, required: true, default: Date.now},
    profile: {
        school: {type: String, required: false},
        subject: {type: String, required: false},
        graduation: {type: String, required: false}
    }

},
{
    collection: 'db_test',
    strict: 'throw',
    toJSON: {getters: true},
    toObject: {getters: true}
}
);