Actualizar campo en el array de elementos exactos en MongoDB
Tengo un documento estructurado así:
{
_id:"43434",
heroes : [
{ nickname : "test", items : ["", "", ""] },
{ nickname : "test2", items : ["", "", ""] },
]
}
Puedo $set
el segundo elemento de la matriz items
del objeto incrustado en la matriz heros
con nickname
"test"
?
Resultado:
{
_id:"43434",
heroes : [
{ nickname : "test", items : ["", "new_value", ""] }, // modified here
{ nickname : "test2", items : ["", "", ""] },
]
}
60
1 answers
Necesita hacer uso de 2 conceptos: el operador posicional de mongodb y simplemente usar el índice numérico para la entrada que desea actualizar.
El operador posicional le permite usar una condición como esta:
{"heros.nickname": "test"}
Y luego haga referencia a la entrada de matriz encontrada de la siguiente manera:
{"heros.$ // <- the dollar represents the first matching array key index
Como desea actualizar la 2a entrada de matriz en "elementos", y las claves de matriz son 0 indexadas, esa es la clave 1.
Así que:
> db.denis.insert({_id:"43434", heros : [{ nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]});
> db.denis.update(
{"heros.nickname": "test"},
{$set: {
"heros.$.items.1": "new_value"
}}
)
> db.denis.find()
{
"_id" : "43434",
"heros" : [
{"nickname" : "test", "items" : ["", "new_value", "" ]},
{"nickname" : "test2", "items" : ["", "", "" ]}
]
}
119
Author: AD7six,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-18 13:08:56
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-18 13:08:56