2015-04-18 1 views
1

У меня есть этот метод на стороне сервера (метод Метеор), который успешно находит документ по идентификатору, который он передал, но когда я иду на выпуск mongo .update() , Я получаю ошибку внутреннего сервера (500).db.collection.update() throws 'undefined не является функцией'

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-документ, а затем пытаетесь вызвать операцию update на результирующем простом объекте JS вместо вызова метода на coll само по себе.

Перепишите код так:

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

Синтаксис обновления Монго Collection принимает два (обязательные) параметров:

  • селектор Монго, чтобы определить, какие документы в коллекции должен быть обновлен (на клиент, использующий minimongo, вам разрешено изменять документы только на _id).
  • объект-модификатор Mongo, чтобы указать, как должны быть изменены соответствующие документы.

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

+0

Woohoo спасибо. – redress