我在Meteor / MongoDB中乘以一组键值对时遇到问题。我想将整个成分列表与固定值相乘。该集合如下所示:
"ingredients" : [
{
"ingredient" : "noodle",
"amount" : 500,
"unit" : "g"
},
{
"ingredient" : "cheese",
"amount" : 100,
"unit" : "g"
}
],
现在,我想将金额值乘以一定数量 multip ,让我们说1,5。所需的输出如下:
"ingredients" : [
{
"ingredient" : "noodle",
"amount" : 750,
"unit" : "g"
},
{
"ingredient" : "cheese",
"amount" : 150,
"unit" : "g"
}
],
现在我有这个:
for (i in this.ingredients){
var precalc = this.ingredients[i].amount * multip; //Here's the Multiplicator
var prez=this.ingredients[i].ingredient;
var prem=this.ingredients[i].unit;
Recipes.update(
{"_id": this._id},
{"$set": {
"ingredients":[{ingredient:prez, amount:precalc, unit:prem}]
}}
);
}
我预先计算了新值并使用了$ set,因为显然$ mul运算符不能与meteor一起使用。这个解决方案部分有效,但不幸的是它会覆盖所有成分,只会倍增最后一个(很明显)。必须有一个更简单的方法 - 我只是没有找到它。我是MongoDB和Meteor的新手,所以非常感谢任何帮助!
答案 0 :(得分:0)
不要对每种成分执行更新,只对整个文档执行一次更新。我会做这样的事情:
let newIngredients = this.ingredients.map(x => {
ingredient: x.ingredient,
amount: x.amount * 1.5,
unit: x.unit
});
Recipes.update(
{_id: this._id},
{$set: {ingredients: newIngredients}}
);