web-dev-qa-db-fra.com

Comment puis-je mettre à jour un seul champ dans un tableau de documents intégrés?

Je souhaite mettre à jour un champ dans un tableau de documents intégrés.

Mon exemple de document est:

db.students.insert(
    {
        first_name:'AA',
        last_name:'BB',
        cours_reussis:[{intitule:'PAI',note:0,name_school:'EPFC'}]
    }
)

Je souhaite modifier la valeur de name_school à "ENSA" au lieu de "EPFC".

7
zouhair

Essaye ça. Cela peut nécessiter de petites modifications en fonction de vos autres variables, mais je pense que cela fonctionnera:

db.students.update(
   { first_name: 'AA' },
   { $set:
      {
        "cours_reussis.0.name_school": 'ENSA'
      }
   }
)

cours_reussis est un tableau. Le 0 est l'index du tableau.

Pour votre référence: $ set

4
Supun Amarasinghe

La réponse de Kalhara est correcte si vous connaissez la position du document incorporé dans votre tableau, cependant il existe une approche alternative qui peut être utilisée pour mettre à jour le premier élément du tableau correspondant sans connaître la position.

En supposant que vous mettez à jour avec un seul tableau dans vos critères de requête, l'opérateur de position ($) peut être utilisé pour faire référence à l'élément de tableau correspondant:

db.students.update(
    // Match criteria
    {
        first_name: 'AA',
        last_name: 'BB',
        'cours_reussis.name_school': 'EPFC'
    },

    // Update first matching array element using the positional operator ($)
    {
        $set: {
            'cours_reussis.$.name_school': 'ENSA',
        }
    }
)
14
Stennie

Vous pouvez l'utiliser pour mettre à jour le premier élément de tableau correspondant sans connaître l'index:

db.students.update(
    { first_name: 'AA',name_school:'EPFC' },
    { $set:
       {
         "cours_reussis.$.name_school": 'ENSA'
       }
    }
 )
0
kumaran