MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Funktionsweise des $set-Aktualisierungsoperators in MongoDB

Die MongoDB $set Der Aktualisierungsoperator ersetzt den Wert eines Felds durch den angegebenen Wert.

Es wird in Verbindung mit Aktualisierungsvorgängen verwendet, zum Beispiel bei der Verwendung von update() Methode zum Aktualisieren eines Dokuments.

Beispiel

Angenommen, wir haben eine Sammlung namens dogs mit folgendem Dokument:

{ "_id" : 1, "name" : "Wag", "weight" : 20 }

Und angenommen, wir wollen das Gewicht des Hundes ändern. Wir können das folgende update() ausführen Befehl zum Aktualisieren des Gewichts:

db.dogs.update(
  { _id: 1 },
  {
     $set: { weight: 30 }
  }
)

Dies führt zu folgender Ausgabe:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Was uns sagt, dass ein Dokument abgeglichen und geändert wurde.

Sehen wir uns die Sammlung an:

db.dogs.find()

Ergebnis:

{ "_id" : 1, "name" : "Wag", "weight" : 30 }

Wir können sehen, dass das Gewicht auf den angegebenen Wert aktualisiert wurde.

Es ist auch möglich, Werte um einen bestimmten Betrag zu erhöhen, aber dazu müssten wir den $inc verwenden Operator anstelle von $set .

Aber in diesem Artikel dreht sich alles um $set Operator, also lass uns fortfahren.

Wenn das Feld nicht existiert

Wenn das Feld, das Sie aktualisieren möchten, nicht vorhanden ist, wird das Feld mit dem angegebenen Wert zum Dokument hinzugefügt.

Beispiel:

db.dogs.update(
  { _id: 1 },
  {
     $set: { height: 40 }
  }
)

Ausgabe:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Wir können sehen, dass ein Dokument abgeglichen und geändert wurde.

Sehen wir uns die Sammlung noch einmal an.

db.dogs.find()

Ergebnis:

{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }

Das Dokument enthält also jetzt eine height Feld mit dem angegebenen Wert.

Eingebettete Dokumente

Sie können Werte in eingebetteten Dokumenten aktualisieren, indem Sie die Punktnotation verwenden. Wenn der angegebene Pfad noch nicht existiert, wird er erstellt.

Beispiel:

db.dogs.update(
  { _id: 1 },
  {
     $set: { 
       "meals.breakfast": "Fish", 
       "meals.lunch": "Chicken", 
       "meals.dinner": "Beef" 
       }
  }
)

Ausgabe:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Lassen Sie uns findOne() verwenden um das Dokument zurückzugeben:

db.dogs.findOne()

Ergebnis:

{
	"_id" : 1,
	"name" : "Wag",
	"weight" : 30,
	"height" : 40,
	"meals" : {
		"breakfast" : "Fish",
		"dinner" : "Beef",
		"lunch" : "Chicken"
	}
}

Wir können sehen, dass das eingebettete Dokument wie angegeben hinzugefügt wurde.

Arrays

Sie können Daten in Arrays aktualisieren, indem Sie die Punktnotation verwenden, während Sie den Index des Elements angeben, das Sie aktualisieren möchten.

Angenommen, wir haben das folgende Dokument:

{
	"_id" : 1,
	"name" : "Wag",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Lassen Sie uns zwei der Array-Elemente und den Namen des Hundes aktualisieren.

db.dogs.update({ 
    _id: 1 
    }, { 
        $set: { 
            "name": "Bark",
            "awards.0": "Bottom Dog", 
            "awards.1": "Worst Dog"
        } 
})

Ergebnis:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Wir können sehen, dass ein Dokument abgeglichen und geändert wurde.

Und jetzt schauen Sie sich das Dokument an.

db.dogs.findOne()

Ergebnis:

{
	"_id" : 1,
	"name" : "Bark",
	"awards" : [
		"Bottom Dog",
		"Worst Dog",
		"Biggest Dog"
	]
}