如何更新作为参数接收的多个集合键?

时间:2015-11-16 00:40:38

标签: javascript mongodb meteor

我正在尝试使用相同的代码在我的集合中增加不同的值。

我正在尝试在更新属性取决于参数的函数中计算:

BuyEntitee : function(id_fb,entitee)
{
  var j = Joueur.findOne({id_fb:id_fb});
  var prix_current = j["prix_"+entitee];
  var update_query = {};

  update_query[entitee+"s"]     = j[entitee+"s"] + 1;
  update_query["prix_"+entitee] = Math.round(50*Math.pow(1.1,j[entitee+"s"]));

    Joueur.update( {id_fb:id_fb},  {
        $set: {update_query}
      }
    );

  j = Joueur.findOne({id_fb:id_fb}); // on recharge le jouer ... utile ??
  console.log('nbHumains : ' + j.humains+ ' query = '+JSON.stringify(update_query));
  return j.rochers;
}

但不幸的是,查询在结构中太深了一层:

meteor:PRIMARY> db.joueur.findOne()
{
    "_id" :
    "humains" : 12,
    "prix_humain" : 50,
    "update_query" : 
    {
            "humains" : 13,
            "prix_humain" : 157
    }
}

我正在创建update_query对象,以便我可以以编程方式更改更新功能中的参数(看到此here)。

有没有办法执行该操作?

1 个答案:

答案 0 :(得分:2)

事实上,发生的事情是ES6语法糖用于指定对象的结果。

当您指定{update_query}时,它被解释为键为"update_query"的对象和变量update_query的值。

因此,它相当于:

Joueur.update( {id_fb:id_fb},  {
    $set: {
     update_query: update_query
    }
  }
);

您真正想要的是将update_query本身分配到$set密钥:

Joueur.update( {id_fb:id_fb},  {
    $set: update_query
  }
);

另外,您可能希望使用$inc修饰符将entitee+"s"增加1。