Questo capitolo introduce come aggiornare i dati dei documenti in MongoDB usando Golang.

Funzioni di Aggiornamento Supportate da MongoDB

  • Collection.UpdateOne - Aggiorna un singolo dato
  • Collection.UpdateMany - Aggiorna dati a lotti
  • Collection.ReplaceOne - Sostituisci dati

Preparare i Dati di Test

Inserire un lotto di dati nella raccolta coll

docs := []interface{}{
	bson.D{
		{"item", "tela"},
		{"qty", 100},
		{"size", bson.D{
			{"h", 28},
			{"w", 35.5},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	// ... (altri dati)
}

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

Aggiornare un Documento

result, err := coll.UpdateOne(
	context.Background(), // Ottenere il parametro del contesto
	bson.D{ // Impostare i criteri di query per trovare il documento con item=paper
		{"item", "paper"},
	},
	bson.D{ // Impostare l'espressione di aggiornamento
		{"$set", bson.D{ // Usare l'operatore $set per impostare il contenuto del campo aggiornato
			{"size.uom", "cm"},  // Cambiare il valore di size.uom in cm
			{"status", "P"}, // Cambiare il valore di status in P
		}},
		{"$currentDate", bson.D{  // Usare l'operatore $currentDate per aggiornare il valore del campo lastModified all'ora attuale
			{"lastModified", true},
		}},
	},
)

Corrispondere un documento in base ai criteri di query, e quindi aggiornare il contenuto di questo documento.

Suggerimento: Se non sei familiare con MongoDB, leggi il tutorial su MongoDB.

Aggiornare documenti in blocco

La differenza rispetto alla funzione UpdateOne è che UpdateMany aggiorna i documenti corrispondenti in blocco in base ai criteri di corrispondenza.

result, err := coll.UpdateMany(
    context.Background(),
    bson.D{ // Impostare i criteri di query, qty > 50
        {"qty", bson.D{
            {"$lt", 50},
        }},
    },
    bson.D{ // Impostare il contenuto dell'aggiornamento
        {"$set", bson.D{
            {"size.uom", "cm"},
            {"status", "P"},
        }},
        {"$currentDate", bson.D{
            {"lastModified", true},
        }},
    },
)

Sostituire un Documento

Ricerca un documento specificato in base ai criteri di query e sostituisce il contenuto del documento con il contenuto specificato.

Suggerimento: Sostituire un documento si riferisce alla sostituzione generale, non all'aggiornamento parziale di determinati valori dei campi nel documento.

result, err := coll.ReplaceOne(
    context.Background(),
    bson.D{ // Impostare i criteri di query, item=paper
        {"item", "paper"},
    },
    bson.D{ // Impostare il nuovo contenuto del documento
        {"item", "paper"},
        {"instock", bson.A{
            bson.D{
                {"warehouse", "A"},
                {"qty", 60},
            },
            bson.D{
                {"warehouse", "B"},
                {"qty", 40},
            },
        }},
    },
)

Innanzitutto, basandosi sui criteri di query, trova il documento con item=paper e quindi lo sostituisce con il nuovo contenuto del documento.