개요
이 가이드에서는 프로젝션 을 사용하여 읽기 작업에서 반환할 필드를 지정하는 방법을 배울 수 있습니다. 프로젝션은 MongoDB가 쿼리에서 반환하는 필드를 지정하는 문서입니다.
샘플 데이터
이 페이지의 예제에서는 Atlas 샘플 데이터 세트의 sample_mflix.movies
컬렉션 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 .NET/ C# 드라이버 시작하기를 참조하세요.
다음 클래스는 sample_mflix.movies
컬렉션 의 문서를 나타냅니다.
public class Movie { public ObjectId Id { get; set; } public string Title { get; set; } public List<string> Genres { get; set; } public string Type { get; set; } public string Plot { get; set; } public List<BsonDocument> Highlights { get; set; } public string Score { get; set; } [ ] public SearchScoreDetails ScoreDetails { get; set; } [ ] public SearchScoreDetails SearchScoreDetails { get; set; } [ ] public string PaginationToken { get; set; } public List<string> Cast { get; set; } [ ] public float[] PlotEmbedding { get; set; } }
참고
Pascal Case를 위한 ConventionPack
앞의 클래스의 속성 이름은 파스칼식 대소문자를 사용하지만 MongoDB 컬렉션 의 필드 이름은 카멜식 대소문자를 사용합니다. 이러한 차이를 해소하기 위해 애플리케이션 시작될 때 다음 코드를 사용하여 ConventionPack
를 등록할 수 있습니다.
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
프로젝션 만들기
프로젝션 만들려면 다음 단계를 수행하세요.
Builders<TDocument>.Projection
정적 속성 사용하여ProjectionDefinitionBuilder<TDocument>
객체 만듭니다. 여기서TDocument
은 컬렉션의 문서가 매핑되는 C# 클래스를 나타냅니다.ProjectionDefinitionBuilder
클래스는 프로젝션 정의하기 위한 형식 안정(type-safe) 인터페이스를 제공합니다.ProjectionDefinitionBuilder<TDocument>
객체 의 프로젝션 메서드를 연결하여 반환된 문서에 포함하거나 제외할 필드를 지정합니다.결과
ProjectionDefinition<TDocument>
객체 변수에 저장합니다.찾기 또는 집계 작업을 수행한 후 변수를
Project()
메서드에 전달합니다.
다음 섹션에서는 ProjectionDefinitionBuilder<TDocument>
객체 에서 연결할 수 있는 메서드에 대해 설명합니다.
필드 프로젝션 메서드
다음 메서드를 사용하면 반환된 문서에 포함하거나 제외할 필드를 지정할 수 있습니다.
ElemMatch
ElemMatch()
메서드는 지정된 조건과 일치하는 첫 번째 요소만 포함하도록 쿼리 결과에서 배열 필드 의 내용을 제한합니다. 이는 MongoDB 쿼리 API 에서 $elemMatch
연산자 사용하여 배열 요소를 프로젝션하는 것과 동일합니다.
ElemMatch()
메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼의 $elemMatch 를 참조하세요.
표현식
Expression()
메서드를 사용하면 Lambda 표현식 사용하여 반환된 문서의 구조를 지정할 수 있습니다. 이는 MongoDB 쿼리 API 의 $project
집계 단계에서 반환된 문서의 구조를 지정하는 것과 같습니다.
Expression()
메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼에서 $프로젝트 를 참조하세요.
참고
ID 필드 제외
Lambda 표현식 사용하여 프로젝션 만들면 명시적으로 포함하지 않는 한 출력에서 Id
필드 자동으로 제외됩니다.
Exclude
Exclude()
메서드를 사용하면 반환된 문서에서 제외할 필드 지정할 수 있습니다. 이는 MongoDB Query API 의 $project
집계 단계에서 필드 제외하는 것과 같습니다. _id
필드 제외하지 않는 한 단일 프로젝션 에서 포함 및 제외 문을 결합할 수 없습니다.
Exclude()
메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼에서 $프로젝트 를 참조하세요.
참고
명시적으로 _id 필드 제외
반환된 문서에는 명시적으로 제외하지 않는 한 _id
필드 포함됩니다. 유일한 예외는 Expression()
메서드를 사용하여 프로젝션 생성하는 경우입니다.
포함
Include()
메서드를 사용하면 반환된 문서에 포함할 필드 지정할 수 있습니다. 이는 MongoDB 쿼리 API 의 $project
집계 단계에 필드 포함하는 것과 같습니다.
Include()
메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼에서 $프로젝트 를 참조하세요.
슬라이스
Slice()
메서드는 쿼리 결과 필드 에 반환할 목록 또는 배열 의 요소 수를 지정합니다. 이는 MongoDB 쿼리 API 에서 $slice
연산자 사용하는 것과 동일합니다.
다음 코드 예시 Slice()
메서드를 사용하여 반환된 문서의 cast
배열 에 있는 Cast
목록의 처음 세 요소를 반환합니다.
var filter = Builders<Movie>.Filter.Text("future"); var projection = Builders<Movie> .Projection .Slice(m => m.Cast, 3) .Include(m => m.Cast); var results = movieCollection.Find(filter) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a1398f29313caabceb500" }, "title": "Back to the Future Part II", "cast": [ "Michael J. Fox", "Christopher Lloyd", "Lea Thompson" ] }
컬렉션 의 끝에서 요소를 반환하려면 Slice()
메서드에 음의 정수를 전달합니다. 다음 코드 예시 반환된 문서의 cast
배열 에 있는 Cast
목록의 마지막 세 요소를 반환합니다.
var filter = Builders<Movie>.Filter.Text("future"); var projection = Builders<Movie> .Projection .Slice(m => m.Cast, -3) .Include(m => m.Title); var results = movieCollection.Find(filter) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a1398f29313caabceb500" }, "title": "Back to the Future Part II", "cast": [ "Lea Thompson", "Thomas F. Wilson" ] }
컬렉션 에서 지정된 수의 요소를 건너뛰려면 건너뛸 요소의 수를 첫 번째 매개변수로, 반환할 요소의 수를 두 번째 매개변수로 전달합니다. 다음 코드 예시 Cast
목록의 첫 번째 요소를 건너뛰고 cast
배열 에서 다음 세 개의 요소를 반환합니다.
var filter = Builders<Movie>.Filter.Text("future"); var projection = Builders<Movie> .Projection .Slice(m => m.Cast, 1, 3) .Include(m => m.Title); var results = movieCollection.Find(filter) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a1398f29313caabceb500" }, "title": "Back to the Future Part II", "cast": [ "Christopher Lloyd", "Lea Thompson", "Thomas F. Wilson" ] }
$slice
연산자에 대해 자세히 학습하려면 MongoDB Server 매뉴얼에서 $slice 를 참조하세요.
메타데이터 프로젝션 메서드
다음 메서드를 사용하면 반환된 문서에 포함하거나 제외할 메타데이터 필드를 지정할 수 있습니다. 메타데이터 필드는 기본값 으로 숨겨져 있습니다.
Meta
Meta()
메서드를 사용하면 반환된 문서에 포함할 메타데이터 필드 지정할 수 있습니다. 이는 MongoDB 쿼리 API 에서 $meta 연산자 사용하여 메타데이터 필드 포함하는 것과 같습니다.
다음 코드 예시 textScore
메타데이터 필드 반환된 문서에 score
이라는 필드 로 추가합니다.
var filter = Builders<Movie>.Filter.Text("future"); var projection = Builders<Movie>.Projection .Include(m => m.Title) .Include(m => m.Plot) .Meta(field: "score", metaFieldName: "textScore"); var results = movieCollection.Find(filter) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "..." }, "plot": "...", "title": "...", "score": "..." }
MetaSearchHighlights
참고
Atlas Search 전용
이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.
MetaSearchHighlights()
에는 반환된 문서에 검색 강조 표시가 포함됩니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "searchHighlights" }
객체 사용하여 검색 하이라이트를 프로젝션하는 것과 동일합니다. 검색 하이라이트를 조회 하려면 검색 필드 지정하는 SearchHighlightOptions
객체 만든 다음 이 객체 Search()
메서드에 전달해야 합니다.
다음 코드 예시 plot
필드 에 대한 검색 하이라이트를 조회한 다음 반환된 문서의 Highlights
속성 에 이러한 하이라이트를 포함합니다.
var filter = Builders<Movie>.Search.Text(path: m => m.Plot, query: "future"); var projection = Builders<Movie>.Projection .Include(m => m.Title) .Include(m => m.Plot) .MetaSearchHighlights(m => m.Highlights); var results = movieCollection .Aggregate() .Search(filter, new SearchHighlightOptions<Movie> (m => m.Plot)) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a13def29313caabdb5661" }, "plot": "She Can See Her Future, But Can't Escape Her Past.", "title": "West", "highlights": [ { "score": 1.286744475364685, "path": "plot", "texts": [ { "value": "She Can See Her ", "type": "text" }, { "value": "Future", "type": "hit" }, { "value": ", But Can't Escape Her Past.", "type": "text" } ] } ] }
검색 하이라이트에 대해 자세히 학습하려면 Atlas 설명서의 결과에서 검색어 강조 표시 를 참조하세요.
MetaSearchScore
참고
Atlas Search 전용
이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.
MetaSearchScore()
메서드는 반환된 문서에 검색 점수를 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "searchScore" }
객체 사용하여 검색 점수를 프로젝션하는 것과 동일합니다.
다음 코드 예시 score
이라는 필드 에 각 문서의 검색 점수를 프로젝션합니다.
var filter = Builders<Movie>.Search.Text(m => m.Plot, "future"); var projection = Builders<Movie>.Projection .Include(m => m.Title) .Include(m => m.Plot) .MetaSearchScore(m => m.Score); var results = movieCollection .Aggregate() .Search(filter) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a13def29313caabdb5661" }, "plot": "She Can See Her Future, But Can't Escape Her Past.", "title": "West", "score": 2.8259084224700928 }
검색 점수에 대해 자세히 학습 결과에서 문서 점수 매기기를 참조하세요.
MetaSearchScoreDetails
참고
Atlas Search 전용
이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.
MetaSearchScoreDetails()
에는 반환된 문서의 검색 점수에 대한 세부 정보가 포함되어 있습니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "searchScoreDetails" }
객체 사용하여 검색 점수 세부 정보를 프로젝션하는 것과 동일합니다.
점수 세부 정보를 조회 하려면 ScoreDetails
속성 true
로 설정하다 SearchOptions
객체 만든 다음 이 객체 Search()
메서드에 전달합니다. 다음 코드 예시 searchScoreDetails
라는 필드 에 각 문서의 검색 점수 세부 정보를 프로젝션하여 이 프로세스 보여줍니다.
var filter = Builders<Movie>.Search.Text(m => m.Plot, "future"); var projection = Builders<Movie>.Projection .Include(m => m.Title) .Include(m => m.Plot) .MetaSearchScore(m => m.Score) .MetaSearchScoreDetails(m => m.SearchScoreDetails); var results = movieCollection .Aggregate() .Search(filter, new SearchOptions<Movie>() { ScoreDetails = true}) .Project(projection) .Limit(1) .ToList();
{ "_id": { "$oid": "573a13def29313caabdb5661" }, ... "scoreDetails": { "value": 2.8259084224700928, "description": "$type:string/plot:future [BM25Similarity], result of:", "details": [ { "value": 2.8259084224700928, "description": "score(freq=1.0), computed as boost * idf * tf from:", "details": [ ... }
검색 점수 세부 정보에 대해 자세히 학습하려면 Atlas 설명서에서 점수 세부 정보 반환 을 참조하세요.
MetaSearchSequenceToken
참고
Atlas Search 전용
이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.
MetaSearchSequenceToken()
메서드는 검색 시퀀스의 한 점 나타내는 토큰을 반환된 문서에 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "searchSequenceToken" }
객체 사용하여 검색 시퀀스 토큰을 프로젝션하는 것과 동일합니다. 이 토큰을 사용하여 지정된 점 전후에 추가 검색을 수행할 수 있습니다.
다음 코드 예시 각 문서의 검색 시퀀스 토큰을 PaginationToken
이라는 속성 에 프로젝션합니다.
var filter = Builders<Movie>.Search.Text(m => m.Plot, "future"); var projection = Builders<Movie>.Projection .Include(m => m.Title) .Include(m => m.Plot) .MetaSearchSequenceToken(m => m.PaginationToken); var results = movieCollection .Aggregate() .Search(filter) .Limit(1) .Project(projection) .ToList();
{ "_id": { "$oid": "573a13def29313caabdb5661" }, "plot": "She Can See Her Future, But Can't Escape Her Past.", "title": "West", "paginationToken": "CIeaARWv2zRAIg5aDFc6E97ykxPKq9tWYQ==" }
검색 시퀀스 토큰에 대해 자세히 학습하려면 검색 결과 페이지 매김을 참조하세요.
MetaTextScore
MetaTextScore()
메서드는 반환된 문서에 $text
검색 점수를 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "textScore" }
객체 사용하여 텍스트 검색 점수를 프로젝션하는 것과 동일합니다.
MetaTextScore()
메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼의 $meta 를 참조하세요.
MetaVectorSearchScore
참고
Atlas Vector Search 전용
이 방법은 Atlas Vector Search 결과를 프로젝션할 때만 사용할 수 있습니다.
MetaVectorSearchScore()
메서드는 반환된 문서에 Atlas Vector Search 점수를 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "vectorSearchScore" }
객체 사용하여 벡터 검색 점수를 프로젝션하는 것과 동일합니다.
MetaVectorSearchScore()
메서드를 사용하는 코드 예시는 Atlas Vector Search참조하세요.
Atlas Vector Search 점수에 대해 자세히 학습하려면 Atlas 문서의 결과에서 문서 점수 매기기 를 참조하세요.
searchMeta
참고
Atlas Search 전용
이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.
SearchMeta()
메서드에는 메타데이터 결과 문서 포함되어 있습니다. 이 문서 의 구조는 결과 유형에 따라 달라집니다. 이는 MongoDB 쿼리 API 에서 $searchMeta
집계 단계 또는 $$SEARCH_META
집계 변수를 사용하여 메타데이터 결과 문서 프로젝션하는 것과 동일합니다.
SearchMeta()
메서드를 사용하는 코드 예시는 Atlas 문서에서 Atlas Search 에서 패싯 사용 방법 을 참조하세요.
$searchMeta
및 $$SEARCH_META
에 대해 자세히 학습 다음 Atlas 설명서를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.