Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
C#/ .NET 드라이버
/ /

반환할 필드 지정

이 가이드에서는 프로젝션 을 사용하여 읽기 작업에서 반환할 필드를 지정하는 방법을 배울 수 있습니다. 프로젝션은 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; }
[BsonElement("scoreDetails")]
public SearchScoreDetails ScoreDetails { get; set; }
[BsonElement("searchScoreDetails")]
public SearchScoreDetails SearchScoreDetails { get; set; }
[BsonElement("paginationToken")]
public string PaginationToken { get; set; }
public List<string> Cast { get; set; }
[BsonElement("plot_embedding")]
public float[] PlotEmbedding { get; set; }
}

참고

Pascal Case를 위한 ConventionPack

앞의 클래스의 속성 이름은 파스칼식 대소문자를 사용하지만 MongoDB 컬렉션 의 필드 이름은 카멜식 대소문자를 사용합니다. 이러한 차이를 해소하기 위해 애플리케이션 시작될 때 다음 코드를 사용하여 ConventionPack 를 등록할 수 있습니다.

var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);

프로젝션 만들려면 다음 단계를 수행하세요.

  1. Builders<TDocument>.Projection 정적 속성 사용하여 ProjectionDefinitionBuilder<TDocument> 객체 만듭니다. 여기서 TDocument 은 컬렉션의 문서가 매핑되는 C# 클래스를 나타냅니다. ProjectionDefinitionBuilder 클래스는 프로젝션 정의하기 위한 형식 안정(type-safe) 인터페이스를 제공합니다.

  2. ProjectionDefinitionBuilder<TDocument> 객체 의 프로젝션 메서드를 연결하여 반환된 문서에 포함하거나 제외할 필드를 지정합니다.

  3. 결과 ProjectionDefinition<TDocument> 객체 변수에 저장합니다.

  4. 찾기 또는 집계 작업을 수행한 후 변수를 Project() 메서드에 전달합니다.

다음 섹션에서는 ProjectionDefinitionBuilder<TDocument> 객체 에서 연결할 수 있는 메서드에 대해 설명합니다.

다음 메서드를 사용하면 반환된 문서에 포함하거나 제외할 필드를 지정할 수 있습니다.

ElemMatch() 메서드는 지정된 조건과 일치하는 첫 번째 요소만 포함하도록 쿼리 결과에서 배열 필드 의 내용을 제한합니다. 이는 MongoDB 쿼리 API 에서 $elemMatch 연산자 사용하여 배열 요소를 프로젝션하는 것과 동일합니다.

ElemMatch() 메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼의 $elemMatch 를 참조하세요.

Expression() 메서드를 사용하면 Lambda 표현식 사용하여 반환된 문서의 구조를 지정할 수 있습니다. 이는 MongoDB 쿼리 API 의 $project 집계 단계에서 반환된 문서의 구조를 지정하는 것과 같습니다.

Expression() 메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼에서 $프로젝트 를 참조하세요.

참고

ID 필드 제외

Lambda 표현식 사용하여 프로젝션 만들면 명시적으로 포함하지 않는 한 출력에서 Id 필드 자동으로 제외됩니다.

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() 메서드를 사용하면 반환된 문서에 포함할 메타데이터 필드 지정할 수 있습니다. 이는 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": "..."
}

참고

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 설명서의 결과에서 검색어 강조 표시 를 참조하세요.

참고

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
}

검색 점수에 대해 자세히 학습 결과에서 문서 점수 매기기를 참조하세요.

참고

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 설명서에서 점수 세부 정보 반환 을 참조하세요.

참고

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() 메서드는 반환된 문서에 $text 검색 점수를 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "textScore" } 객체 사용하여 텍스트 검색 점수를 프로젝션하는 것과 동일합니다.

MetaTextScore() 메서드를 사용하는 코드 예시는 MongoDB Server 매뉴얼의 $meta 를 참조하세요.

참고

Atlas Vector Search 전용

이 방법은 Atlas Vector Search 결과를 프로젝션할 때만 사용할 수 있습니다.

MetaVectorSearchScore() 메서드는 반환된 문서에 Atlas Vector Search 점수를 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "vectorSearchScore" } 객체 사용하여 벡터 검색 점수를 프로젝션하는 것과 동일합니다.

MetaVectorSearchScore() 메서드를 사용하는 코드 예시는 Atlas Vector Search참조하세요.

Atlas Vector Search 점수에 대해 자세히 학습하려면 Atlas 문서의 결과에서 문서 점수 매기기 를 참조하세요.

참고

Atlas Search 전용

이 방법은 Atlas Search 결과를 프로젝션할 때만 사용할 수 있습니다.

SearchMeta() 메서드에는 메타데이터 결과 문서 포함되어 있습니다. 이 문서 의 구조는 결과 유형에 따라 달라집니다. 이는 MongoDB 쿼리 API 에서 $searchMeta 집계 단계 또는 $$SEARCH_META 집계 변수를 사용하여 메타데이터 결과 문서 프로젝션하는 것과 동일합니다.

SearchMeta() 메서드를 사용하는 코드 예시는 Atlas 문서에서 Atlas Search 에서 패싯 사용 방법 을 참조하세요.

$searchMeta$$SEARCH_META에 대해 자세히 학습 다음 Atlas 설명서를 참조하세요.

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

돌아가기

반환할 문서 지정

이 페이지의 내용