บทนี้เป็นการแนะนำวิธีการอัปเดตข้อมูลเอกสารใน Golang MongoDB

ฟังก์ชันการอัปเดตที่รองรับโดย MongoDB

  • Collection.UpdateOne - อัปเดตข้อมูลเดียว
  • Collection.UpdateMany - อัปเดตข้อมูลเป็นชุด
  • Collection.ReplaceOne - แทนที่ข้อมูล

เตรียมข้อมูลทดสอบ

แทรกชุดข้อมูลลงในคอลเลคชัน coll

docs := []interface{}{
	bson.D{
		{"item", "canvas"},
		{"qty", 100},
		{"size", bson.D{
			{"h", 28},
			{"w", 35.5},
			{"uom", "cm"},
		}},
		{"status", "A"},
	},
	// ... (ข้อมูลอื่น ๆ)
}

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

อัปเดตเอกสาร

result, err := coll.UpdateOne(
	context.Background(), // รับพารามิเตอร์เนื้อหา
	bson.D{ // ตั้งเกณฑ์ค้นหาเพื่อค้นหาเอกสารที่ item=paper
		{"item", "paper"},
	},
	bson.D{ // ตั้งการแสดงอัปเดต
		{"$set", bson.D{ // ใช้ตัวดำเนินการ $set เพื่อกำหนดเนื้อหาฟิลด์ที่อัปเดต
			{"size.uom", "cm"},  // เปลี่ยนค่าของ size.uom เป็น cm
			{"status", "P"}, // เปลี่ยนค่าของ status เป็น P
		}},
		{"$currentDate", bson.D{  // ใช้ตัวดำเนินการ $currentDate เพื่ออัปเดตค่าของฟิลด์ lastModified เป็นเวลาปัจจุบัน
			{"lastModified", true},
		}},
	},
)

จับคู่เอกสารตามเกณฑ์ค้นหา และจากนั้นอัปเดตเนื้อหาของเอกสารนี้

ทิป: หากคุณไม่คุ้นเคยกับ MongoDB โปรดอ่าน บทแนะนำ MongoDB

อัพเดตเอกสารเป็นกลุ่ม

ความแตกต่างจากฟังก์ชัน UpdateOne คือการที่ UpdateMany อัพเดตเอกสารที่ตรงตามเงื่อนไขการตรวจพบไว้ในกลุ่มเอกสาร

result, err := coll.UpdateMany(
	context.Background(),
	bson.D{ // ตั้งเงื่อนไขค้นหา, qty > 50
		{"qty", bson.D{
			{"$lt", 50},
		}},
	},
	bson.D{ // ตั้งเนื้อหาที่จะอัพเดต
		{"$set", bson.D{
			{"size.uom", "cm"},
			{"status", "P"},
		}},
		{"$currentDate", bson.D{
			{"lastModified", true},
		}},
	},
)

แทนที่เอกสาร

ค้นหาเอกสารที่กำหนดโดยเงื่อนไขและแทนที่เนื้อหาของเอกสารด้วยเนื้อหาที่กำหนด

เกร็ดความรู้: การแทนที่เอกสารหมายถึงการที่มีการแทนที่โดยรวมไม่ใช่การอัพเดตบางค่าฟิลด์ในเอกสาร

result, err := coll.ReplaceOne(
	context.Background(),
	bson.D{ // ตั้งเงื่อนไขค้นหา, item=paper
		{"item", "paper"},
	},
	bson.D{ // ตั้งเนื้อหาเอกสารใหม่
		{"item", "paper"},
		{"instock", bson.A{
			bson.D{
				{"warehouse", "A"},
				{"qty", 60},
			},
			bson.D{
				{"warehouse", "B"},
				{"qty", 40},
			},
		}},
	},
)

ในขั้นแรก โดยการใช้เงื่อนไขค้นหา ค้นหาเอกสารที่มี item=paper และจากนั้นทำการแทนที่ด้วยเนื้อหาเอกสารใหม่