I имеет следующую структуру:MongoDB - Обновление в массиве второго уровня
document: {
'data': {
'field_1': 'blabla',
'field_2': 'blabla++',
'interesting_field': [
{
'f_1': 'abc',
'this_is_interesting': [
{
'a1': 'text',
'a2': 'other_text'
},
{
'a1': 'text 2',
'a2': 'text 3'
}
]
},
'etc': 'etc'
]
},
'somthing_boring': 'bla'
}
Что мне нужно сделать, это обновление всего «a2» от «this_is_interesting» из полого «interesting_field» (если они соответствуют определенным критериям).
Для обновления в массиве уровня 1, я могу сделать что-то вроде:
{
'_id': new ObjectId('5621020d78946ac20a000021'),
'data.interesting_field' : {
$elemMatch : {
'f_1' : 'abc'
}
}
},
{$set: {'data.interesting_field.$.something_to_update': 'something'}}
Но ... кажется, я не могу использовать спичку для уровня массивов 2+. Есть идеи, как это сделать? (думал о mapReduce ... но не думаю, что я могу использовать его в запросе на обновление).
Ваш документ недействителен. Является ли 'this_is_interesting' массив поддокументов? – styvane
Мой плохой, фиксированный ... – zozo