Docs Menu
Docs Home
/ / /
Go 드라이버
/ / /

한 번의 작업으로 삽입 또는 업데이트

이 페이지의 내용

  • 개요
  • 업서트
  • 추가 정보

이 가이드에서는 업서트를 수행하는 방법을 배울 수 있습니다.

이 가이드의 예시에서는 다음 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_idheight 필드에 해당합니다.

존재하지 않는 데이터베이스 및 collection

쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.

애플리케이션은 삽입 및 업데이트 작업을 사용하여 데이터를 저장하고 수정합니다. 문서의 존재 여부에 따라 삽입 작업과 업데이트 작업 중 하나를 선택해야 하는 경우도 있습니다. MongoDB는 업서트 옵션을 사용하여 이러한 결정을 단순화합니다.

업서트는 다음 조치 중 하나를 수행합니다:

  • 쿼리 필터와 일치하는 문서 업데이트

  • 쿼리 필터와 일치하는 문서가 없는 경우 새 문서를 삽입합니다.

다음 쓰기 작업 메서드의 옵션에서 SetUpsert() 메서드에 true를 전달하여 upsert를 지정할 수 있습니다.

  • UpdateOne()

  • UpdateByID()

  • UpdateMany()

  • ReplaceOne()

  • FindOneAndUpdate()

  • FindOneAndReplace()

업서트를 지정하지 않으면 쿼리 필터와 일치하는 문서가 0개일 때 쓰기 작업에서 변경 사항이 발생하지 않습니다. 이는 falseSetUpsert() 메서드에 전달하는 것과 같습니다.

다음 예시에서는 다음 작업을 수행합니다:

  • species가 'Ledebouria socialis'이고 plant_id3인 문서와 일치합니다.

  • 일치하는 문서의 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 설명서를 참조하세요.

돌아가기

문서의 배열 업데이트

이 페이지의 내용