这是我的文件的一部分:
var actions = {
title: 'Change of windows'
energySavings:[
{
_id: 234324234,
mainCategory: 'Elektricitet',
subCategory: 'Belysning',
value: 1
},
{
_id: 5434534543,
mainCategory: 'Elektricitet',
subCategory: 'Utrustning',
value: 1
}
]
}
我希望能够更新energySavings,添加项目和删除项目。这可以在三个单独的查询中完成。或者,我只能在一个
中完成var givenAction = JSON.parse(req.body.action);
mongoose.model('Action').findOne({actionId: req.params.actionId}, function(err, action){
action.energySavings = givenAction.energySavings;
action.save(function(err, savedAction){
res.status(200).send(savedAction);
});
})
方式更少的代码然后三个单独的查询。但是,如果客户端程序员犯了一个错误,例如清空整个数组并保存它,我们就会遇到问题。有没有最好的做法,在一个查询或几个更多控制?
答案 0 :(得分:0)
您还可以使用findOneAndUpdate
mongoose更新文档。如果错误地添加了空数组,则需要在更新或添加查询之前检查if
查询是否为空。
var givenAction = JSON.parse(req.body.action);
mongoose.model('Action').findOneAndUpdate({
actionId: req.params.actionId
}, {
$set: {
energySavings: givenAction.energySavings
}
}, callback);
您可以使用$push
添加新项目,$pull
删除项目而不是$set
来更新项目。我不认为在一个查询中更新energySavings,添加项目和删除项目不是一个好选择。