Mongoose.js: как реализовать создание или обновление?
У меня есть запрос, тело которого содержит данные и _id
Каков лучший способ реализовать код, который будет обновляться, если существует запись с _id, и будет ли она создана? Мой код:
var obj = req.body;
Model.findById(obj._id, function(err, data){
if (!data){
var model = new Model(obj)
model.save(function(err, data){
res.send({method: 'create', error: err, data: data})
})
} else {
Model.findByIdAndUpdate(obj._id, obj, function(){
res.send({method: 'update', error: err, data: data})
})
}
Я просто думаю, может быть, есть способ сделать это.
Ответы
Ответ 1
Вы можете сделать это с помощью одного upsert:
var obj = req.body;
var id = obj._id;
delete obj._id;
if (id) {
Model.update({_id: id}, obj, {upsert: true}, function (err) {...});
}
Предостережение заключается в том, что ваши настройки по умолчанию и промежуточное ПО (если они есть) не будут применяться.
Обновление Mongoose 4.x
Теперь вы можете использовать параметр setDefaultOnInsert
, чтобы также применять значения по умолчанию, если upsert создает новый документ.
Model.update({_id: id}, obj, {upsert: true, setDefaultsOnInsert: true}, cb);