Este capítulo apresenta como atualizar dados de documentos no MongoDB em Golang.
Funções de Atualização Suportadas pelo MongoDB
- Collection.UpdateOne - Atualiza um único dado
- Collection.UpdateMany - Atualiza dados em lotes
- Collection.ReplaceOne - Substitui dados
Preparar Dados de Teste
Inserir um lote de dados na coleção coll
docs := []interface{}{
bson.D{
{"item", "tela"},
{"qty", 100},
{"size", bson.D{
{"h", 28},
{"w", 35.5},
{"uom", "cm"},
}},
{"status", "A"},
},
//...
}
result, err := coll.InsertMany(context.Background(), docs)
Atualizar um Documento
result, err := coll.UpdateOne(
context.Background(), // Obter o parâmetro de contexto
bson.D{ // Definir os critérios de consulta para encontrar o documento com item=papel
{"item", "papel"},
},
bson.D{ // Definir a expressão de atualização
{"$set", bson.D{ // Usar o operador $set para definir o conteúdo atualizado do campo
{"size.uom", "cm"}, // Alterar o valor de size.uom para cm
{"status", "P"}, // Alterar o valor de status para P
}},
{"$currentDate", bson.D{ // Usar o operador $currentDate para atualizar o valor do campo lastModified para o horário atual
{"lastModified", true},
}},
},
)
Corresponder a um documento com base nos critérios de consulta e, em seguida, atualizar o conteúdo deste documento.
Dica: Se você não estiver familiarizado com o MongoDB, leia o tutorial do MongoDB.
Atualizar Documentos em Massa
A diferença da função UpdateOne é que o UpdateMany atualiza os documentos correspondentes em massa com base nos critérios de correspondência.
resultado, err := coll.UpdateMany(
context.Background(),
bson.D{ // Definir os critérios de consulta, qty > 50
{"qty", bson.D{
{"$lt", 50},
}},
},
bson.D{ // Definir o conteúdo da atualização
{"$set", bson.D{
{"size.uom", "cm"},
{"status", "P"},
}},
{"$currentDate", bson.D{
{"lastModified", true},
}},
},
)
Substituir um Documento
Consulte um documento específico com base nos critérios de consulta e substitua o conteúdo do documento pelo conteúdo especificado.
Dica: Substituir um documento refere-se à substituição geral, não à atualização parcial de determinados valores de campo no documento.
resultado, err := coll.ReplaceOne(
context.Background(),
bson.D{ // Definir os critérios de consulta, item=papel
{"item", "papel"},
},
bson.D{ // Definir o novo conteúdo do documento
{"item", "papel"},
{"instock", bson.A{
bson.D{
{"warehouse", "A"},
{"qty", 60},
},
bson.D{
{"warehouse", "B"},
{"qty", 40},
},
}},
},
)
Primeiro, com base nos critérios de consulta, encontre o documento com item=papel e, em seguida, substitua-o pelo novo conteúdo do documento.