我很难找到更新具有不同价值的多个文档的解决方案。
我有一个应用程序,可以为每个已售出的商品销售我想减少数据库中的数量。
var soldItems =
[
{
"_id": "1"
"name": "Foo",
"price": 1.09
},
{
"_id": "2",
"name": "Bar",
"price": 2.00
}
]
var ids = [];
soldItems.forEach(function(item){
ids.push(item._id);
});
我收集了soldItems对象数组中的所有ID。
现在我想知道数据库中有多少项目数量,然后将数量减少一个。
ModelItem.find({_id: {$in: ids}}, function(err, docs){
if(err) throw err;
docs.forEach(function(doc){
soldItems.forEach(function(item){
if(doc._id === item._id){
doc.quantity += -1;
}
});
});
Item.update({_id: {$in: ids}}, {$set: docs }, function(err){
if(err) throw err;
});
});
显然这是错误的,因为$ set传入数组而不是对象。
我想知道如何为数据库中的每个项目减少一个数量,但同时我不想在数据库中删除少于0个项目。
我确定我从错误的角度看这个。
感谢。
答案 0 :(得分:2)
改为使用$inc
运算符和multi
选项:
Item.update({_id: {$in: ids}, quantity: {$gt: 0}}, // selection
{$inc: {quantity: -1}}, // modifications
{multi: true}); //options