2015-04-18 96 views
1

我有這個服務器端方法(流星方法),它通過ID成功找到文件,它通過了,但是當我去發出一個mongo .update() ,我得到一個內部服務器錯誤(500)。db.collection.update()拋出'未定義不是函數'

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

您的更新語法錯誤:您正在檢索Mongo文檔,然後嘗試調用所產生的普通JS對象上的update操作,而不是調用coll上的方法本身。

重寫你的代碼是這樣的:

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

蒙戈集合更新語法有兩個(強制性)參數:

  • 一個Mongo的選擇,以確定哪些文件集合中應更新(上使用minimongo的客戶端只能通過_id修改文檔)。
  • 一個Mongo修飾符對象,指定如何修改匹配文檔。

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

+0

哇噢謝謝。 – redress