2017-01-17 2 views
0

У меня есть документ, который мне нужно обновить. Однако в старом документе может быть одно поле, которое я хочу исключить из обновления и сохранить.Обновить весь документ за исключением указанных полей

Как я могу это достичь?

В приведенном ниже примере, старыйpositions документ может включать в себя поле primary, который я хочу, чтобы между обновлениями.

Meteor.users.update(
    { 
    type: SI.ENUM.USER.TYPE.BROADCASTER, 
    'positions._id': this.previous._id 
    }, 
    { 
    $set: {'positions.$': doc} 
    }, 
    { 
    multi: true 
    } 
); 

ответ

0

Чтобы обновить только определенные элементы субдокумента в массиве, вы должны использовать оператор позиционирования в полях субдокумента.

Meteor.users.update(
    { 
     type: SI.ENUM.USER.TYPE.BROADCASTER, 
     'positions._id': this.previous._id 
    }, 
    { 
     $set: {'positions.$.foo': newFoo, 'positions.$.bar': newBar } 
    }, 
    { 
     multi: true 
    } 
); 

Это обновит только foo & bar поля поддокументу в массиве.

Если у вас есть значения доступны в качестве объекта в переменной doc, вы можете сделать следующее:

var keys = Object.getOwnPropertyNames(doc); 
var newDoc = {} 
keys.forEach(key => { 
    newDoc['positions.$.' + key] = doc[key]; 
}); 

Meteor.users.update(
    { 
     type: SI.ENUM.USER.TYPE.BROADCASTER, 
     'positions._id': this.previous._id 
    }, 
    { 
     $set: newDoc 
    }, 
    { 
     multi: true 
    } 
); 
+0

Спасибо за подсказку. Я надеялся, что может быть монгольский оператор, но это тоже делает трюк. – maze

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