El problema aquí es que no entiendes muchas cosas.
Cuando haces "outerArray.field.innerArray": { $in: [ 1, 3 ] }
en su consulta, no obtiene solo innerArray
donde tiene 1 o 3. Obtiene documentos donde existen estas matrices.
Entonces está consultando todo el documento.
Tienes que usar arrayFilter
para actualizar los valores cuando el filtro coincida.
Entonces, si te he entendido bien, la consulta que quieres es:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Ejemplo aquí
Observe cómo el primer objeto en update
esta vacio. Tienes que poner allí el campo para que coincida con el documento (no la matriz, el documento).
Si desea actualizar solo un documento, debe completar el primer objeto (objeto de consulta) con los valores que desee, por ejemplo:{"_id": 11}
.