javascript - 更新数组对象会创建一个新的空对象

标签 javascript mongodb meteor

我有一个订单数组,其中包含用户 ID、金额和订单本身。每个用户一次只能有一个订单,但我正在尝试添加一个选项来编辑您的订单。我创建了一个应该执行此操作的方法:

'click .edit': function (event) {
       var order = $('#editOrder').val();
       var price = $('#editPrice').val();
       Meteor.call('changeOrder', Router.current().data()._id, Meteor.userId(), order, price);
       Session.set("editing", false);
   },
changeOrder: function (id, user, order, amount) {

           Polls.update({_id: id, 'Orders.User': user}, {$set: {'Orders.$': {
                       User: user,
                       Order: order,
                       Amount: parseFloat(amount)
                   }}});
   },

此方法实际上有效,但问题是每次我编辑订单时,它都会创建一个具有相同用户 ID 和空订单和金额属性的新对象。
老实说,我不知道什么可能导致更新功能插入无效数据。

下面是带有额外空订单的 Poll 结构的示例:

{
"_id" : "4wGAPfxCvKfH4L8JL",
"Company" : "FirmaTest",
"Restaurants" : [ 
    "Trylinka", 
    "Da Grasso", 
    "Faster", 
    "Green Way", 
    "Telepizza", 
    "Piramida"
],
"Expires" : ISODate("2015-08-24T08:26:00.791Z"),
"Votes" : {
    "Trylinka" : 1,
    "Da Grasso" : 0,
    "Faster" : 2,
    "Green Way" : 3,
    "Telepizza" : 0,
    "Piramida" : 0
},
"Voted" : [ 
    "TfQM7954a5SHoR9os"
],
"Winner" : "Green Way",
"Orders" : [ 
    {
        "User" : "TfQM7954a5SHoR9os",
        "Order" : "Some chicken",
        "Amount" : 15
    }, 
    {
        "User" : "TfQM7954a5SHoR9os",
        "Order" : null,
        "Amount" : NaN
    }
],
"Ordered" : [ 
    "TfQM7954a5SHoR9os"
]
}
<小时/>

已解决

结果我触发了位于同一页面的提交表单。尽管我调用的事件不是“表单提交”,但其中有一个表单,因此提交仍然完成。此外,我在表单提交和按钮触发器中使用了相同的变量名称,因此插入方法仍然执行。
感谢您的回答,但事实证明问题出在其他地方,完全是我的错:)

最佳答案

您是否可以使用字符串而不是 ObjectID 来查询 _id

尝试将 id 转换为 ObjectID:

new Meteor.Collection.ObjectID(valuefromhtml)

所以你的代码将是:

Polls.update({
    _id: new Meteor.Collection.ObjectID(id),
    'Orders.User': user
}, {
    $set: {
        'Orders.$': {
            User: user,
            Order: order,
            Amount: parseFloat(amount)
        }
    }
});

关于javascript - 更新数组对象会创建一个新的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32178404/

相关文章:

mongodb - MongoDB 中对象键的索引

javascript - 降低包含多个 javascript 的成本

javascript/children-检查图像的 alt 值

mongodb - 位置运算符和字段限制

javascript - Phantom.js 中的 setTimeout

meteor - 使用 MeteorJS 的渐进式 Web 应用程序,如何链接 manifest.json

javascript - meteor 服务器无需登录即可插入数据

javascript - 使用简单的 JavaScript

javascript - 如何使用 useState - hook 将类组件(输入、条件)更改为功能组件?

node.js - Mongoose 通过引用 ID 查找