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.