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

반환할 필드 지정

이 페이지의 내용

  • 개요
  • 샘플 데이터
  • 프로젝션
  • 필드 제외
  • 필드 포함
  • 집계
  • 추가 정보
  • API 문서

이 가이드에서는 문서에서 반환할 필드를 지정하는 방법에 대해 알아볼 수 있습니다.

이 가이드의 예시에서는 다음 Course 구조체를 courses collection의 문서 모델로 사용합니다.

type Course struct {
Title string `bson:"title,omitempty"`
CourseId string `bson:"course_id,omitempty"`
Enrollment int32 `bson:"enrollment,omitempty"`
}

omitempty struct 태그는 프로젝션 사양에 따라 역마샬링할 때 필드를 제외하도록 드라이버에 지시합니다.

이 가이드의 예시를 실행하려면 다음 스니펫을 사용하여 샘플 데이터를 db.courses collection에 로드하세요.

coll := client.Database("db").Collection("courses")
docs := []interface{}{
Course{Title: "Primate Behavior", CourseId: "PSY2030", Enrollment: 40},
Course{Title: "Revolution and Reform", CourseId: "HIST3080", Enrollment: 12},
}
result, err := coll.InsertMany(context.TODO(), docs)

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

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

각 문서에는 각 문서의 title, course_idenrollment 필드에 해당하는 과정 제목, 과정 ID 및 최대 등록 수를 포함하는 대학 교과에 대한 설명이 포함되어 있습니다.

프로젝션은 일치하는 문서에서 반환할 필드를 지정합니다. 프로젝션 문서에서 해당 필드를 포함할 때는 1을 포함한 필드 이름을 사용하고, 해당 필드를 제외하기 위해서는 0이 포함된 이름을 사용합니다. 집계 프레임워크를 사용하는 경우 새로 계산된 필드를 프로젝션으로 포함하도록 지정할 수도 있습니다.

프로젝션 문서를 SetProjection() 메서드에 전달하여 프로젝션을 지정할 수 있습니다. 다음 작업은 옵션 객체를 매개 변수로 사용합니다.

  • Find()

  • FindOne()

  • FindOneAndDelete()

  • FindOneAndReplace()

  • FindOneAndUpdate()

프로젝션을 지정하지 않으면 작업은 일치하는 문서의 모든 필드를 반환합니다.

필드를 제외하려면 0을 사용하여 제외할 필드를 SetProjection() 메서드에 전달합니다. 제외할 필드를 지정한 경우 드라이버에서는 프로젝션 문서에서 명시적으로 제외되지 않은 모든 필드가 포함됩니다.

다음 예에서는 Find() 메서드에서 반환한 일치하는 문서에서 course_idenrollment 필드를 제외합니다.

filter := bson.D{}
opts := options.Find().SetProjection(bson.D{{"course_id", 0}, {"enrollment", 0}})
cursor, err := coll.Find(context.TODO(), filter, opts)
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior"}
{"title":"Revolution and Reform"}

필드를 제외하려면 1을 사용하여 제외할 필드를 SetProjection() 메서드에 전달합니다. 제외할 필드를 지정한 경우 드라이버는 프로젝션 문서에 명시적으로 포함되지 않은 모든 필드를 포함합니다.

다음 예에는 Find() 메서드에서 반환한 일치 문서의 titleenrollment 필드만 포함되어 있습니다.

filter := bson.D{}
opts := options.Find().SetProjection(bson.D{{"title", 1}, {"enrollment", 1}})
cursor, err := coll.Find(context.TODO(), filter, opts)
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior","enrollment":40}
{"title":"Revolution and Reform","enrollment":12}

$project 단계를 생성하여 집계 파이프라인에서 프로젝션을 지정할 수도 있습니다.

다음 예에는 Aggregate() 메서드에서 반환한 일치 문서의 titlecourse_id 필드만 포함되어 있습니다.

projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"course_id", 1}}}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{projectStage})
if err != nil {
panic(err)
}
var results []Course
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}
{"title":"Primate Behavior","course_id":"PSY2030"}
{"title":"Revolution and Reform","course_id":"HIST3080"}

언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.

텍스트 검색 내 텍스트 점수 프로젝션 방법에 대해 알아보려면 텍스트 검색을 참조하세요.

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

반환되는 결과 수 제한