He intentado la siguiente consulta de mongoose que no parece funcionar:
Model.findOneAndUpdate( { name: origin }, { $set: { 'field1.$[id1].field2.-1': "value" } }, { arrayFilters: [ { 'id1.userId': "customerId" } ], new: true } );Nota:
field1yfield2son matrices
MongoDB no acepta los índices negativos, lo que está causando problemas.
Puede considerar usar el operador $set (agregación) y usar el operador double $map :
db.collection.aggregate([ { $match: { name: "myname" } } { $set: { field1: { $map: { input: "$field1", in: { $cond: { if: { $ne: [ "$$this.userId", "customerId" ] }, then: "$$this", else: { $mergeObjects: [ "$$this", { field2: { $concatArrays: [ { $slice: [ "$$this.field2", { $add: [ { $size: "$$this.field2" }, -1 ] } ] }, ["value"] ] } } ] } } } } } } } ])Aplique el operador $set junto con el operador posicional $ en su actualización para cambiar el campo de nombre.
El operador posicional $ identificará el elemento correcto en la matriz para actualizar sin especificar explícitamente la posición del elemento en la matriz, por lo que su declaración de actualización final debería verse así:
db.collection.update( { "friends.u.username": "michael" }, { "$set": { "friends.$.u.name": "hello" } } )Respuesta tomada de - https://stackoverflow.com/a/34431571