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

标签 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;
}

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

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

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

有办法实现吗?

最佳答案

事实上,发生的事情是用于指定对象的 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。

关于javascript - 如何更新作为参数接收的多个集合键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33726910/

相关文章:

php - 如何使用 php 通过谷歌地图获取步行或驾车距离

python - 使用 MongoEngine Document 类方法进行自定义验证和预保存 Hook

node.js - 更新数组中的多个元素

MongoDB:如果使用 $addToSet 或 $push,是否应该预分配文档?

cordova - Meteor:在移动 Cordova 上等待热代码推送期间按住启动屏幕

javascript 回调无法以异步方式工作

javascript - jQuery EasyUI 插件以编程方式实例化

javascript - AutoForm-访问模板内对象属性数组的值

javascript - 在单独的页面上打开剧透

mongodb - 适用于高读取率的数据库解决方案