#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}
}
);