Chương này giới thiệu cách cập nhật dữ liệu tài liệu trong Golang MongoDB.

Các Hàm Cập Nhật Được Hỗ Trợ bởi MongoDB

  • Collection.UpdateOne - Cập nhật một mảnh dữ liệu duy nhất
  • Collection.UpdateMany - Cập nhật dữ liệu theo lô
  • Collection.ReplaceOne - Thay thế dữ liệu

Chuẩn Bị Dữ Liệu Kiểm Tra

Chèn một lô dữ liệu vào tập hợp coll

docs := []interface{}{
	bson.D{
		{"item", "canvas"},
		{"qty", 100},
		{"size", bson.D{
			{"h", 28},
			{"w", 35.5},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	// (các mục dữ liệu khác đã được bỏ qua để tiết kiệm không gian)
}

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

Cập Nhật Một Tài Liệu

result, err := coll.UpdateOne(
	context.Background(), // Lấy tham số ngữ cảnh
	bson.D{ // Đặt tiêu chí truy vấn để tìm tài liệu với item=paper
		{"item", "paper"},
	},
	bson.D{ // Đặt biểu thức cập nhật
		{"$set", bson.D{ // Sử dụng toán tử $set để đặt nội dung trường đã cập nhật
			{"size.uom", "cm"},  // Thay đổi giá trị của size.uom thành cm
			{"status", "P"}, // Thay đổi giá trị của trường status thành P
		}},
		{"$currentDate", bson.D{  // Sử dụng toán tử $currentDate để cập nhật giá trị trường lastModified thành thời gian hiện tại
			{"lastModified", true},
		}},
	},
)

Ước lượng tài liệu dựa trên tiêu chí truy vấn, sau đó cập nhật nội dung của tài liệu này.

Mẹo: Nếu bạn không quen với MongoDB, vui lòng đọc hướng dẫn MongoDB.

Cập nhật Tài liệu theo Phạm vi Lớn

Khác biệt so với chức năng UpdateOne là chức năng UpdateMany cập nhật các tài liệu phù hợp theo tiêu chí phù hợp.

result, err := coll.UpdateMany(
	context.Background(),
	bson.D{ // Đặt tiêu chí truy vấn, số lượng > 50
		{"qty", bson.D{
			{"$lt", 50},
		}},
	},
	bson.D{ // Đặt nội dung cập nhật
		{"$set", bson.D{
			{"size.uom", "cm"},
			{"status", "P"},
		}},
		{"$currentDate", bson.D{
			{"lastModified", true},
		}},
	},
)

Thay Thế một Tài liệu

Truy vấn một tài liệu cụ thể dựa trên tiêu chí truy vấn và thay thế nội dung tài liệu bằng nội dung được chỉ định.

Mẹo: Thay thế một tài liệu đề cập đến việc thay thế toàn bộ, không phải là cập nhật một số giá trị trường cụ thể trong tài liệu.

result, err := coll.ReplaceOne(
	context.Background(),
	bson.D{ // Đặt tiêu chí truy vấn, item=giấy
		{"item", "paper"},
	},
	bson.D{ // Đặt nội dung tài liệu mới
		{"item", "paper"},
		{"instock", bson.A{
			bson.D{
				{"warehouse", "A"},
				{"qty", 60},
			},
			bson.D{
				{"warehouse", "B"},
				{"qty", 40},
			},
		}},
	},
)

Trước tiên, dựa trên tiêu chí truy vấn, tìm tài liệu với item=giấy, sau đó thay thế nó bằng nội dung tài liệu mới.