Js: 如何实现创建或更新?

我有一个请求,其正文包含 data 和 _ 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})
})
}

我只是在想也许有更好的办法。

74146 次浏览

你可以用一个 翻转来做到这一点:

var obj = req.body;
var id = obj._id;
delete obj._id;
if (id) {
Model.update({_id: id}, obj, {upsert: true}, function (err) {...});
}

需要注意的是,不会应用模型的默认值和中间件(如果有的话)。

猫鼬4. x 更新

现在,如果 upsert 创建了一个新文档,您可以使用 setDefaultOnInsert选项来应用默认值。

Model.update({_id: id}, obj, {upsert: true, setDefaultsOnInsert: true}, cb);
 var obj = req.body;
var id = obj._id;
delete obj._id;
model.findOneAndUpdate({ _id: id }, obj, {
new: true,
upsert: true, // Make this update into an upsert
});