consultas anidadas mongodb updates

anidadas - MongoDB: actualiza un objeto en una matriz anidada



consultas en mongodb (3)

A continuación debería funcionar bien como se prueba

Primero verifique el valor actual de la matriz.

db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})

Ahora dispara el comando de actualización

db.test.update({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Ahora verifique los resultados nuevamente para validar los valores de actualización

db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})

Espero que esto ayude.

{ "_id": "xPBc4By8FemDwTPqH", "u": { "_id": "6PoZawHZcQz4Gwzcv", "username": "michael" }, "friends": [ { "u": { "_id": "eGqDjAjjtYADbuSnn", "username": "michael", "name": "michael" } }, { "u": { "_id": "k4gKCGwYryXDMMHvs", "username": "joyce", "name": "joyce" } } ] }

Quiero actualizar el nombre de "friends.u.username": el nombre de "michael" es "hola", cómo necesito hacerlo.


Aplique el operador $set junto con el operador $ positional en su actualización para cambiar el campo de name .

El operador $ positional 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" } } )


Puede usar el operador $ set.

> db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })