我正在尝试使用相同的代码在我的集合中增加不同的值。
我正在尝试在更新属性取决于参数的函数中计算:
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)。
有没有办法执行该操作?
答案 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。