2015-11-03 4 views
0

Я обновил мою коллекцию Meteor.users(), чтобы включить подкомплекс 'profile' и внутренний профиль. У меня есть массив объектов, называемых «уведомлениями». Структура объекта для уведомлений выглядит следующим образом:Обновление всех элементов массива поля метеорной коллекции

  'profile.notifications': { 
      prompt: prompt, 
      message: message, 
      hasBeenRead: false, 
      timestamp: Messages.find({}, {sort: {"ts": 1}, limit: 0}).fetch().pop().ts, 
      } 

Есть ли способ, используя один из методов Монго, в hasBeenRead изменить к истинно для всех объектов в массиве? Я могу изменить только один элемент, используя индексы массива (код ниже), но я не могу использовать этот подход для одновременного изменения всех них.

Meteor.users.update({ 
     _id: Meteor.userId() 
    }, { 
     'profile.notifications.0.hasBeenRead': true //only changes first elem 
     } 
    }) 

ответ

1

В настоящее время нет способа обновить все элементы массива через mongo напрямую. Вы можете либо отправить несколько обновлений в mongo, либо извлечь уведомления массив, обновить все элементы, а затем обновить документ за один раз.

var notifications = Meteor.user().profile.notifications; 
notifications.forEach(function(e,i,a){a[i].hasBeenRead=true}); 
Meteor.users.update({ _id: Meteor.userId() }, 
    { $set: { 'profile.notifications': notifications }}); 
Смежные вопросы