บทนี้เป็นการแนะนำวิธีการอัปเดตข้อมูลเอกสารใน 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 และจากนั้นทำการแทนที่ด้วยเนื้อหาเอกสารใหม่