更新流星集合的字段的所有数组元素

时间:2015-11-03 18:41:59

标签: arrays mongodb meteor

我更新了我的Meteor.users()集合以包含'profile'子目录和内部配置文件我有一个名为'notifications'的对象数组。通知的对象结构如下所示:

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

有没有办法使用Mongo的方法之一将数组中的所有对象的hasBeenRead更改为true?我可以使用数组索引(下面的代码)只更改一个元素,但我不能使用这种方法一次更改所有元素。

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

1 个答案:

答案 0 :(得分: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 }});