不能用动态数组id从流星表单更新mongo值

Can't update a mongo value with a dynamic array id from a meteor form

本文关键字:表单 更新 mongo 流星 动态 数组 id 不能      更新时间:2023-09-26

我有一个流星事件,其中我试图从事件处理程序更新一个子文档中的一个值。

我放在一起的字符串是order.0。号码,order.1。数量等。我可以看到在调试器中生成了正确的字符串。我也可以手动更新控制台中的字段,但是代码存根只拒绝更新数字。

事件代码为

   'click #closeEdit': function(evt,tmpl) {
    evt.preventDefault();
    Session.set('showEditEvent',false);
    Session.set('lastMod', new Date());
    Requests.update({_id:Session.get('editingReqEvent')}, {$set: {locked_by: null}});
   var request = Requests.findOne({_id:Session.get('editingReqEvent')});
    for (i=1; i <= request.order.length; i++) {
      var val=tmpl.find('#'+i).value;
      if(!val) {// its null
        val = 0
      }
      var toSet = "order."+(i-1)+".number";
      debugger;
      Requests.update({_id:Session.get('editingReqEvent')}, {$set: {toSet: parseInt(val)}});
    }
  },

我应该怎么做这个(显然我这里不是这样做的)。

谢谢。

{toSet: parseInt(val)}将创建一个键为toSet的对象。不是你想要的,对吧?您需要执行如下操作:

var toSet = "order."+(i-1)+".number"
var updates = {}
updates[toSet] = parseInt(val)
Requests.update(Session.get('editingReqEvent'), {$set: updates})

PS,在你的代码中,创建i作为一个局部变量,而不是一个全局变量(猜测你不使用它作为一个全局变量)。DS

{toSet: parseInt(val)}

在这段代码中,toSet不会计算为order.x.number,因为它是一个键。更新查询将尝试设置文档中toSet属性的值。你可以用这样的代码来解决这个问题:

var toSet = {};
var toSet["order."+(i-1)+".number"] = parseInt(val);
Requests.update({_id:Session.get('editingReqEvent')}, {$set: toSet});