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.