한 번의 작업으로 삽입 또는 업데이트
개요
이 가이드에서는 업서트를 수행하는 방법을 배울 수 있습니다.
샘플 데이터
이 가이드의 예시에서는 다음 Plant
구조체를 plants
컬렉션의 문서 모델로 사용합니다.
type Plant struct { Species string PlantID int32 `bson:"plant_id"` Height float64 }
이 가이드의 예시를 실행하려면 다음 스니펫을 사용하여 샘플 데이터를 db.plants
컬렉션에 로드합니다.
coll := client.Database("db").Collection("plants") docs := []interface{}{ Plant{Species: "Polyscias fruticosa", PlantID: 1, Height: 27.6}, Plant{Species: "Polyscias fruticosa", PlantID: 2, Height: 34.9}, Plant{Species: "Ledebouria socialis", PlantID: 1, Height: 11.4}, } result, err := coll.InsertMany(context.TODO(), docs)
각 문서에는 종, 식물 ID 및 길이 등 개별 식물에 대한 설명이 포함되어 있으며, 이는 각 문서의 species
, plant_id
및 height
필드에 해당합니다.
팁
존재하지 않는 데이터베이스 및 collection
쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.
업서트
애플리케이션은 삽입 및 업데이트 작업을 사용하여 데이터를 저장하고 수정합니다. 문서의 존재 여부에 따라 삽입 작업과 업데이트 작업 중 하나를 선택해야 하는 경우도 있습니다. MongoDB는 업서트 옵션을 사용하여 이러한 결정을 단순화합니다.
업서트는 다음 조치 중 하나를 수행합니다:
쿼리 필터와 일치하는 문서 업데이트
쿼리 필터와 일치하는 문서가 없는 경우 새 문서를 삽입합니다.
다음 쓰기 작업 메서드의 옵션에서 SetUpsert()
메서드에 true
를 전달하여 upsert를 지정할 수 있습니다.
UpdateOne()
UpdateByID()
UpdateMany()
ReplaceOne()
FindOneAndUpdate()
FindOneAndReplace()
팁
업서트를 지정하지 않으면 쿼리 필터와 일치하는 문서가 0개일 때 쓰기 작업에서 변경 사항이 발생하지 않습니다. 이는 false
를 SetUpsert()
메서드에 전달하는 것과 같습니다.
예시
다음 예시에서는 다음 작업을 수행합니다:
species
가 'Ledebouria socialis'이고plant_id
가3
인 문서와 일치합니다.일치하는 문서의
height
을(를)8.3
(으)로 업데이트합니다쿼리 필터와 일치하는 문서가 없는 경우 이 문서를 삽입합니다.
filter := bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}} update := bson.D{{"$set", bson.D{{"species", "Ledebouria socialis"}, {"plant_id", 3}, {"height", 8.3}}}} opts := options.Update().SetUpsert(true) result, err := coll.UpdateOne(context.TODO(), filter, update, opts) if err != nil { panic(err) } fmt.Printf("Number of documents updated: %v\n", result.ModifiedCount) fmt.Printf("Number of documents upserted: %v\n", result.UpsertedCount)
Number of documents updated: 0 Number of documents upserted: 1
모든 문서를 보기 위해 plants
컬렉션을 쿼리하면 쿼리 필터가 일치하는 문서가 없으므로 지정된 필드가 있는 새 문서가 삽입된 것을 볼 수 있습니다:
{"species":"Polyscias fruticosa","plant_id":1,"height":27.6} {"species":"Polyscias fruticosa","plant_id":2,"height":34.9} {"species":"Ledebouria socialis","plant_id":1,"height":11.4} {"species":"Ledebouria socialis","plant_id":3,"height":8.3}
추가 정보
언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.
API 문서
이 가이드에 언급된 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.