Dieses Kapitel führt ein, wie man Dokumentendaten in Golang MongoDB aktualisiert.

Von MongoDB unterstützte Update-Funktionen

  • Collection.UpdateOne - Aktualisiert einzelne Daten
  • Collection.UpdateMany - Aktualisiert Daten in Chargen
  • Collection.ReplaceOne - Ersetzt Daten

Vorbereitung der Testdaten

Fügen Sie eine Charge von Daten in die Sammlung 'coll' ein

docs := []interface{}{
	bson.D{
		{"item", "Leinwand"},
		{"qty", 100},
		{"size", bson.D{
			{"h", 28},
			{"w", 35.5},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	bson.D{
		{"item", "Journal"},
		{"qty", 25},
		{"size", bson.D{
			{"h", 14},
			{"w", 21},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	// ... (weitere Daten hier)
}

result, err := coll.InsertMany(context.Background(), docs)

Ein Dokument aktualisieren

result, err := coll.UpdateOne(
	context.Background(), // Den Kontextparameter erhalten
	bson.D{ // Die Abfragekriterien festlegen, um das Dokument mit item=paper zu finden
		{"item", "paper"},
	},
	bson.D{ // Den Update-Ausdruck festlegen
		{"$set", bson.D{ // Den Operator $set verwenden, um den aktualisierten Feldinhalt festzulegen
			{"size.uom", "cm"},  // Den Wert von size.uom auf cm ändern
			{"status", "P"}, // Den Wert von status auf P ändern
		}},
		{"$currentDate", bson.D{  // Den Operator $currentDate verwenden, um den Wert des Feldes lastModified auf die aktuelle Zeit zu aktualisieren
			{"lastModified", true},
		}},
	},
)

Ein Dokument basierend auf den Abfragekriterien suchen und dann den Inhalt dieses Dokuments aktualisieren.

Tipp: Wenn Sie mit MongoDB nicht vertraut sind, lesen Sie bitte das MongoDB-Tutorial.

Dokumente in Bulk aktualisieren

Im Gegensatz zur UpdateOne-Funktion aktualisiert UpdateMany die übereinstimmenden Dokumente in Bulk basierend auf den Übereinstimmungskriterien.

result, err := coll.UpdateMany(
	context.Background(),
	bson.D{ // Setze die Abfragekriterien, qty > 50
		{"qty", bson.D{
			{"$lt", 50},
		}},
	},
	bson.D{ // Setze den Aktualisierungsinhalt
		{"$set", bson.D{
			{"size.uom", "cm"},
			{"status", "P"},
		}},
		{"$currentDate", bson.D{
			{"lastModified", true},
		}},
	},
)

Dokument ersetzen

Ein bestimmtes Dokument basierend auf den Abfragekriterien abfragen und den Dokumenteninhalt durch den angegebenen Inhalt ersetzen.

Tipp: Das Ersetzen eines Dokuments bezieht sich auf den vollständigen Ersatz, nicht auf die teilweise Aktualisierung bestimmter Feldwerte im Dokument.

result, err := coll.ReplaceOne(
	context.Background(),
	bson.D{ // Setze die Abfragekriterien, item=paper
		{"item", "paper"},
	},
	bson.D{ // Setze den neuen Dokumenteninhalt
		{"item", "paper"},
		{"instock", bson.A{
			bson.D{
				{"warehouse", "A"},
				{"qty", 60},
			},
			bson.D{
				{"warehouse", "B"},
				{"qty", 40},
			},
		}},
	},
)

Zuerst basierend auf den Abfragekriterien das Dokument mit item=paper finden und dann durch den neuen Dokumenteninhalt ersetzen.