MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mettre à jour le champ dans le tableau d'éléments exact dans MongoDB

Vous devez utiliser 2 concepts :l'opérateur positionnel de mongodb et simplement utiliser l'index numérique pour l'entrée que vous souhaitez mettre à jour.

L'opérateur positionnel vous permet d'utiliser une condition comme celle-ci :

{"heroes.nickname": "test"}

puis référencez l'entrée de tableau trouvée comme suit :

{"heroes.$  // <- the dollar represents the first matching array key index

Comme vous voulez mettre à jour la 2ème entrée du tableau dans "items", et que les clés du tableau sont indexées à 0 - c'est la clé 1.

Donc :

> db.denis.insert({_id:"43434", heroes : [{ nickname : "test",  items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]});
> db.denis.update(
    {"heroes.nickname": "test"}, 
    {$set: {
        "heroes.$.items.1": "new_value"
    }}
)
> db.denis.find()
{
    "_id" : "43434", 
    "heroes" : [
        {"nickname" : "test", "items" : ["", "new_value", "" ]},
        {"nickname" : "test2", "items" : ["", "", "" ]}
    ]
}