2016-02-02 3 views
3

Я работаю над запросом, который необходимо обновить вложенным в meteor mongo. Мой код выглядит следующим образом:обновить суб-документ в meteor mongo

Cases.update(
    {"_id":doc._id,"notes._id": doc.noteid}, 
    {$set:{ 
    'notes.$': { 
       'note': doc.note, 
       'updatedBy': currentUser, 
       'updatedAt': date 
       } 
}}); 

это работа, однако это удалить другие поля, которые не в обновлении, такие как «createdAt» и «дата». Я дошел до того, как сделать это, но я получаю тот же результат:.

Cases.update(
    {"_id":doc._id,"notes._id": doc.noteid}, 
    {$set:{ 
    'notes.$': { 
       'note': doc.note, 
       'updatedBy': currentUser, 
       'updatedAt': date, 
       'createdBy':doc.createdBy, 
       'date': doc.date, 
       '_id':doc.noteid 
       } 
}}); 

ноты $ ._ идентификатор, дата и CreatedBy поля удаляются в opertion. Я использую aldeed simple schema и collection 2 как пакеты пакета autoForm. Это обновление, однако, было выполнено с использованием общей формы с Meteor.call. Я использую метеор 1.2.1. Я знаю, что в сборке 2 установлен параметр removeEmptyString по умолчанию, поэтому я попытался сделать это вторым способом, но он все еще не работает. Может кто-нибудь, пожалуйста, помогите?

ответ

4

Ваш $ set говорит: «Назначьте заметки. $ Object этому объекту, который я вам даю, и удаляю все, что в нем есть».

Вы хотите сделать что-то вроде:

Cases.update({"_id":doc._id, "notes._id": doc.noteid}, 
{ 
    $set:{ 
    'notes.$.note': doc.note, 
    'notes.$.updatedBy': currentUser, 
    'notes.$.updatedAt': date 
    } 
}); 

Мой $ набор говорит, «Назначают эти три конкретных полей примечаний $ объекта к значениям Я даю вам, и не трогают. что-нибудь еще."

+0

Это сработало хорошо. Спасибо Стивен Вудс за ответ. – jessiPP

+1

Облицовка аналогичной дилеммы обновления суб-документов, и я думаю, что этот ответ наводит меня на правильный путь – Rexford

Смежные вопросы