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 })