{ id: 1, name: "venkat", description: "Description", address: "chennai", pinCode: "600100", authenticationCode: "123", authenticated: false, deleted: false, Location: [ { name: "foo", description: "LocationDecription", parent: "parent", UserAccess: [ { loginName: "paklon", role: "role" } ] } ] }
Necesito actualizar el role:"admin"
donde las condiciones coinciden como id: 1
, el nombre de la matriz de la Location
name: "foo"
y la matriz anidada de la Location
de "UserAccess.loginName": "paklon"
y luego actualizar la función.
De acuerdo con la descripción mencionada anteriormente, como solución, intente ejecutar la siguiente operación de actualización en el shell de MongoDB
db.collection.update({ "id": 1, "Location": { $elemMatch: { "name": "foo", "UserAccess": { $elemMatch: { "loginName": "paklon" } } } } }, { $set: { "Location.$.UserAccess.0.role": "admin" } })
La siguiente consulta debería funcionar:
db.collection.update( {"id": 1, "Location.name": "foo", "Location.UserAccess.loginName": "paklon"}, {$set: {"Location.0.UserAccess.0.role": "admin"}} )
Para actualizar un elemento en particular en una matriz, debe usar el operador posicional "$" que en realidad es un marcador de posición para el primer elemento. Por lo tanto, podría reemplazarse con "0" y como permitía usar el "$" solo una vez en la consulta, deberá usar "0" al final de la consulta en cualquier caso.
También eche un vistazo a la documentación de mongodb correspondiente