MongoDB / Meteor:将整个数组乘以集合

时间:2016-05-10 10:42:36

标签: arrays mongodb list meteor

我在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的新手,所以非常感谢任何帮助!

1 个答案:

答案 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}}
);