db.collection.update()抛出'undefined不是函数'

时间:2015-04-18 16:26:02

标签: meteor

我有这个服务器端方法(Meteor方法),它通过传递的ID成功找到文档,但是当我发出mongo .update()时,我收到内部服务器错误(500)。

setToggle: function(detailId){
    var checked_detail = detailsCollection.findOne({_id: detailId});

    checked_detail.update({$set: {checkboxStatus: 'toggle'}});
}

这是我最初在客户端上调用方法来创建文档的地方:

'submit form': function(ev){
    ev.preventDefault();
    var detailFormData = {
        detail: $(ev.target).find('[name = detail]').val(),
        parentId: $(ev.target).find('[name = parentId]').val(),
        checkboxStatus: ''
    }

    Meteor.call('addDetail', detailFormData);
}

这是服务器插入方法,因此您可以看到模型:

 addDetail: function(detailFormData){
    if(! Meteor.userId()){
        throw new Meteor.Error('not-authorized');
    }

    detailsCollection.insert({
        detail: detailFormData.detail,
        parentId: detailFormData.parentId,
        checkboxStatus: detailFormData.checkboxStatus  
    });
}

1 个答案:

答案 0 :(得分:1)

您的更新语法错误:您正在检索Mongo文档,然后尝试在生成的纯JS对象上调用update操作,而不是在集合本身上调用该方法。

重写你的代码:

setToggle: function(detailId){
  detailsCollection.update(detailId,{
    $set: {checkboxStatus: 'toggle'}
  });
}

Mongo Collection更新语法有两个(强制)参数:

  • 一个Mongo选择器,用于识别应该更新集合中的哪些文档(在客户端上使用minimongo,您只能通过_id修改文档)。
  • 一个Mongo修饰符对象,用于指定如何修改匹配文档。

https://docs.meteor.com/#/full/update