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.