我有一个请求,其中包含数据和_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})
})
}
Run Code Online (Sandbox Code Playgroud)
我只是想也许有更好的办法.
Joh*_*yHK 83
你可以用一个upsert来做到这一点:
var obj = req.body;
var id = obj._id;
delete obj._id;
if (id) {
Model.update({_id: id}, obj, {upsert: true}, function (err) {...});
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,您的模型的默认值和中间件(如果有)将不会被应用.
Mongoose 4.x更新
setDefaultOnInsert如果upsert创建新文档,您现在可以使用该选项也应用默认值.
Model.update({_id: id}, obj, {upsert: true, setDefaultsOnInsert: true}, cb);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42569 次 |
| 最近记录: |