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.