Ten rozdział przedstawia, jak aktualizować dane dokumentów w MongoDB przy użyciu języka Golang.
Funkcje aktualizacji obsługiwane przez MongoDB
- Collection.UpdateOne - Aktualizuj pojedynczy element danych
- Collection.UpdateMany - Aktualizuj dane partiami
- Collection.ReplaceOne - Zamień dane
Przygotowanie danych testowych
Wstaw partię danych do kolekcji coll
docs := []interface{}{
bson.D{
{"item", "canvas"},
{"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"},
},
// ... (pozostałe dane pominięte dla zwięzłości)
}
result, err := coll.InsertMany(context.Background(), docs)
Aktualizacja dokumentu
result, err := coll.UpdateOne(
context.Background(), // Pobierz parametr kontekstu
bson.D{ // Ustaw kryteria zapytania, aby znaleźć dokument z pozycją=paper
{"item", "paper"},
},
bson.D{ // Ustaw wyrażenie aktualizacji
{"$set", bson.D{ // Użyj operatora $set do ustawienia zaktualizowanej zawartości pola
{"size.uom", "cm"}, // Zmień wartość size.uom na cm
{"status", "P"}, // Zmień wartość statusu na P
}},
{"$currentDate", bson.D{ // Użyj operatora $currentDate do zaktualizowania wartości pola lastModified na aktualny czas
{"lastModified", true},
}},
},
)
Dopasuj dokument na podstawie kryteriów zapytania, a następnie zaktualizuj zawartość tego dokumentu.
Wskazówka: Jeśli nie jesteś zaznajomiony z MongoDB, przeczytaj Samouczek MongoDB.
Aktualizacja dokumentów zbiorowo
Różnica między funkcją UpdateOne polega na tym, że UpdateMany aktualizuje pasujące dokumenty zbiorowo na podstawie kryteriów dopasowania.
wynik, błąd := coll.UpdateMany(
context.Background(),
bson.D{ // Ustaw kryteria zapytania, qty > 50
{"qty", bson.D{
{"$lt", 50},
}},
},
bson.D{ // Ustaw treść aktualizacji
{"$set", bson.D{
{"size.uom", "cm"},
{"status", "P"},
}},
{"$currentDate", bson.D{
{"lastModified", true},
}},
},
)
Zamień dokument
Wyszukaj określony dokument na podstawie kryteriów zapytania i zamień zawartość dokumentu na określoną treść.
Wskazówka: Zastąpienie dokumentu odnosi się do ogólnej zamiany, a nie do częściowej aktualizacji określonych wartości pól w dokumencie.
wynik, błąd := coll.ReplaceOne(
context.Background(),
bson.D{ // Ustaw kryteria zapytania, item=paper
{"item", "paper"},
},
bson.D{ // Ustaw nową treść dokumentu
{"item", "paper"},
{"instock", bson.A{
bson.D{
{"warehouse", "A"},
{"qty", 60},
},
bson.D{
{"warehouse", "B"},
{"qty", 40},
},
}},
},
)
Najpierw na podstawie kryteriów zapytania znajdź dokument z polem item=paper, a następnie zastąp go nową treścią dokumentu.