it-swarm.com.de

Wie kann ich ein einzelnes Feld in einem Array eingebetteter Dokumente aktualisieren?

Ich möchte ein Feld in einem Array eingebetteter Dokumente aktualisieren.

Mein Beispieldokument ist:

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

Ich möchte den Wert von name_school In "ENSA" anstelle von "EPFC" ändern.

7
zouhair

Versuche dies. Möglicherweise sind kleine Änderungen erforderlich, die auf Ihren anderen Variablen basieren, aber ich denke, dies wird funktionieren:

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

cours_reussis ist ein Array. Die 0 ist der Array-Index.

Als Referenz: $ set

4

Die Antwort von Kalhara ist richtig, wenn Sie die Position des eingebetteten Dokuments in Ihrem Array kennen. Es gibt jedoch einen alternativen Ansatz, mit dem das erste übereinstimmende Array-Element aktualisiert werden kann, ohne die Position zu kennen.

Angenommen, Sie aktualisieren Ihre Abfragekriterien mit einem einzelnen Array, kann der Positionsoperator ($) verwendet werden, um auf das übereinstimmende Array-Element zu verweisen:

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

Sie können dies verwenden, um das erste übereinstimmende Array-Element zu aktualisieren, ohne den Index zu kennen:

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