이 챕터에서는 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 튜토리얼을 읽어보세요.
대량 문서 업데이트
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인 문서를 찾은 후 새로운 문서 내용으로 교체합니다.