Вы можете использовать позиционный аргумент обновления массива. Я попробовал ниже синтаксис, чтобы заставить его работать, и вывод ниже
db.coll.update({}, {
$push: {
'websites.$[].ads': {
$each: [{
_id: 'some_id',
ad_type: 'some value'
}
]
}
}
})
OUTPUT
{
"_id": ObjectId("SOME_MAIN_ID"),
"websites": [{
"ads": [{
"_id": "some_id",
"ad_type": "some value"
}, {
"_id": "some_id_1",
"ad_type": "some value_1"
}
]
}
]
}
РЕДАКТИРОВАНИЕ Для замены массивов
db.coll.update({}, {
$set: {
'websites.$[].ads': [{
_id: 'some_id_1',
ad_type: 'some value_1'
}
]
}
})
WriteResult({
"nMatched": 1,
"nUpserted": 0,
"nModified": 1
})
db.coll.find() {
"_id": 'SOME_MAIN_ID',
"websites": [{
"ads": [{
"_id": "some_id_1",
"ad_type": "some value_1"
}
]
}
]
}
db.coll.update({}, {
$set: {
' websites.$[].ads ': [{
_id: ' some_id_1 ',
ad_type: ' some value_1 '
}, {
_id: ' some_other_id_2 ',
ad_type: ' some_other_type '
}
]
}
})
WriteResult({
"nMatched": 1,
"nUpserted": 0,
"nModified": 1
})
db.coll.find() {
"_id": 'SOME_MAIN_ID',
"websites": [{
"ads": [{
"_id": "some_id_1",
"ad_type": "some value_1"
}, {
"_id": "some_other_id_2",
"ad_type": "some_other_type"
}
]
}
]
}