반환할 필드 지정
개요
이 가이드에서는 문서에서 반환할 필드를 지정하는 방법에 대해 알아볼 수 있습니다.
샘플 데이터
이 가이드의 예시에서는 다음 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_id
및 enrollment
필드에 해당하는 과정 제목, 과정 ID 및 최대 등록 수를 포함하는 대학 교과에 대한 설명이 포함되어 있습니다.
프로젝션
프로젝션은 일치하는 문서에서 반환할 필드를 지정합니다. 프로젝션 문서에서 해당 필드를 포함할 때는 1
을 포함한 필드 이름을 사용하고, 해당 필드를 제외하기 위해서는 0
이 포함된 이름을 사용합니다. 집계 프레임워크를 사용하는 경우 새로 계산된 필드를 프로젝션으로 포함하도록 지정할 수도 있습니다.
프로젝션 문서를 SetProjection()
메서드에 전달하여 프로젝션을 지정할 수 있습니다. 다음 작업은 옵션 객체를 매개 변수로 사용합니다.
Find()
FindOne()
FindOneAndDelete()
FindOneAndReplace()
FindOneAndUpdate()
팁
프로젝션을 지정하지 않으면 작업은 일치하는 문서의 모든 필드를 반환합니다.
필드 제외
필드를 제외하려면 0
을 사용하여 제외할 필드를 SetProjection()
메서드에 전달합니다. 제외할 필드를 지정한 경우 드라이버에서는 프로젝션 문서에서 명시적으로 제외되지 않은 모든 필드가 포함됩니다.
예시
다음 예에서는 Find()
메서드에서 반환한 일치하는 문서에서 course_id
및 enrollment
필드를 제외합니다.
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)) }
필드 포함
필드를 제외하려면 1
을 사용하여 제외할 필드를 SetProjection()
메서드에 전달합니다. 제외할 필드를 지정한 경우 드라이버는 프로젝션 문서에 명시적으로 포함되지 않은 모든 필드를 포함합니다.
예시
다음 예에는 Find()
메서드에서 반환한 일치 문서의 title
및 enrollment
필드만 포함되어 있습니다.
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)) }
집계
$project 단계를 생성하여 집계 파이프라인에서 프로젝션을 지정할 수도 있습니다.
예시
다음 예에는 Aggregate()
메서드에서 반환한 일치 문서의 title
및 course_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)) }
추가 정보
언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.
텍스트 검색 내 텍스트 점수 프로젝션 방법에 대해 알아보려면 텍스트 검색을 참조하세요.
API 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.