Use el método de shell findAndModify
para satisfacer sus necesidades.
Pero no puede usar el carácter posicional $
más de una vez mientras se proyecta en MongoDb, por lo que es posible que deba realizar un seguimiento en el lado del cliente.
Use arrayFilters
para actualizar el subdocumento profundamente anidado, en lugar del operador posicional all $[]
.
A continuación se muestra una consulta de trabajo -
var query = {
universe: 'comics'
};
var update = {
$set: {
'saga.$[outer].characters.$[inner].character': 'lobezno',
'saga.$[outer].characters.$[inner].picture': '618035022354.png',
}
};
var fields = {
'saga.characters': 1
};
var updateFilter = {
arrayFilters: [
{
'outer.name': 'x-men'
},
{
'inner.character': 'wolverine'
}
]
};
db.collection.findAndModify({
query,
update,
fields,
arrayFilters: updateFilter.arrayFilters
new: true
});