MongoDB更新导致其他不匹配的字段也被更新

时间:2017-03-08 04:39:01

标签: javascript mongodb

我正在做一个餐厅管理系统,在表格排序部分,有一个带有ID标签的表格列表(例如T01,T02 ......),当我点击一个在桌子上,会有弹出食物菜单的模式,我可以点击添加任何食物的数量或减少它。

问题

当我尝试在订购多个表格时添加任何食物的数量时,其他表格获得了我添加到当前表格的数量

如果Table1: {Fish : 3}, Table2: {Fish : 0},如果我向Table2添加1个Fish,则Table1也会添加1

最终结果:Table1: {Fish : 4}, Table2: {Fish : 1}

触发

如果我为Table1订购,那么关闭模式并返回订购部分以便为Table2订购,Table1将受到影响,如果我订购N个表,则会继续,所有表都会受到影响

临时溶液

如果我订购Table1,然后刷新浏览器,然后订购Table2,那么我订购的上一张表不受其影响

我正在使用Meteor 1.4

代码:

//Client
'click .js-order' : (e) => {
  var tableId = e.currentTarget.id;

  var findTableOrder = Order.findOne({table_id: tableId});

  var orderList = {}

  findTableOrder
    ? console.log("Order exist")
    : Order.insert({table_id: tableId, order: orderList});

  orderList = Order.findOne({table_id: tableId}).order

  Session.set("quantityTrack", orderList);
  $("#orderModal").modal("show");

  $(".modal-title").text("Order for table: " + Tables.findOne({_id: tableId}).table_id);

  $(".js-add-quantity").click((e) => { // Adding Event
    var foodObjKey = ItemMeta.findOne({UID: e.currentTarget.id}).foodId;
    if (orderList[foodObjKey] == null) {
      orderList[foodObjKey] = 0;
    }
    orderList[foodObjKey] = orderList[foodObjKey] + 1;
    Meteor.call("updateOrder", tableId, orderList, (err) => {
      err
        ? console.log(err)
        : console.log("Order Update Successful");
    });
    Session.set("quantityTrack", orderList);
  }); // Adding event ends
}

//Server/methods
updateOrder : (tableid, orderlist) => {
  Order.update({
    table_id: tableid
  }, {
    $set: {
      order: orderlist
    }
  });
});

如果我遗漏了任何内容,请告诉我,我会编辑帖子,并且事先非常感谢。

1 个答案:

答案 0 :(得分:0)

由于模板帮助程序总是等待侦听事件,如果事件被触发,它会添加,所以在单击一个表后,它等待,然后单击另一个表,触发两个表都被添加,所以解决方案将添加事件与表的同一点击事件分开。