我有一个像这样的数据集:
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4875"),
"fruit" : "APPLE",
"count" : 0,
},
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4876"),
"fruit" : "MANGO",
"count" : 0,
},
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4877"),
"fruit" : "BANANA",
"count" : 0,
}
我想让计数器增加1,我已经知道了。我的问题是如何增加计数器的批量。
假设我有一个值为
的数组array = ['APPLE', 'BANANA'];
现在我想只增加数组中存在的那些元素的计数器。
所以在数组之后,期望的结果将是这样的。
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4875"),
"fruit" : "APPLE",
"count" : 1,
},
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4876"),
"fruit" : "MANGO",
"count" : 0,
},
{
"_id" : ObjectId("2q9abf6b3b758dbed05d4877"),
"fruit" : "BANANA",
"count" : 1,
}
注意:这只是一个基本示例。数组最多可容纳50个条目或更多条目。什么是最好的appreoach。 我使用MongoDB的mongoose在Nodejs-Express Environment上。任何帮助表示赞赏。
答案 0 :(得分:0)
一种可能的方法是在数据库中查询所有文档,这些文档的水果值与您拥有的数组中的任何值相匹配。然后遍历返回的对象数组。
YourModel.find({fruit: { $in: yourArray }}, function(err, foundFruits){
if (err){
//handle error
}
foundFruits.forEach(function(fruit){
//make all the changes you want to make here
//for example, incrementing counter:
fruit.counter += 1;
fruit.save();
});
});
请注意,如果您要做的只是增加计数器,而不进行其他更改,那么您只需在查询中使用update选项,或者作为chridam建议使用$ inc选项