Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

반환할 필드 지정

이 가이드에서는 프로젝션 을 사용하여 읽기 작업에서 반환할 필드를 지정하는 방법을 배울 수 있습니다. 프로젝션은 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": "..."
}

MetaScore() 메서드는 반환된 문서에 숫자 점수 값을 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "score" } 객체 사용하여 점수 메타데이터 프로젝션하는 것과 동일합니다. 드라이버 사용자가 수행하는 검색 종류에 따라 적절한 기본 점수 메타데이터 (searchScore, vectorSearchScore 또는 textScore)를 자동으로 선택합니다. 메서드에 속성 표현식 전달하여 출력 필드 이름을 지정합니다.

다음 코드 예시 각 문서의 점수를 Score 속성 의 숫자 값으로 프로젝션합니다.

var filter = Builders<Movie>.Search.Text(m => m.Title, "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaScore(m => m.Score);
var result = moviesCollection.Aggregate()
.Search(filter)
.Project<Movie>(projection)
.Limit(1)
.ToList();
[{
"title" : "Bright Future",
"plot" : "...",
"score" : "..."
}]

MetaScoreDetails() 메서드는 반환된 문서에 사용 가능한 모든 점수 세부 정보 메타데이터 포함합니다. 이는 MongoDB 쿼리 API 에서 { "$meta": "scoreDetails" } 객체 사용하여 점수 세부 정보 메타데이터 프로젝션하는 것과 동일합니다. 점수 세부 정보를 조회 하려면 SearchOptions 객체 에서 ScoreDetailstrue 로 설정하다 하고 이를 Search() 메서드에 전달해야 합니다.

다음 코드 예시 각 문서의 점수 세부 정보를 ScoreDetails이라는 속성 에 프로젝션합니다.

var filter = Builders<Movie>.Search.Text(m => m.Plot, "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaScoreDetails(m => m.ScoreDetails);
var result = moviesCollection.Aggregate()
.Search(filter, new SearchOptions<Movie> { ScoreDetails = true })
.Project<Movie>(projection)
.Limit(1)
.ToList();
[{
"title" : "West",
"plot" : "She Can See Her Future, But Can't Escape Her Past.",
"scoreDetails" : {
"value" : "...",
"description" : "...",
"details" : "..."
}
}]

참고

MongoDB 검색 전용

이 메서드는 MongoDB 검색하다 결과를 프로젝션할 때만 사용할 수 있습니다.

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

참고

MongoDB 검색 전용

이 메서드는 MongoDB 검색하다 결과를 프로젝션할 때만 사용할 수 있습니다.

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
}

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

참고

MongoDB 검색 전용

이 메서드는 MongoDB 검색하다 결과를 프로젝션할 때만 사용할 수 있습니다.

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

참고

MongoDB 검색 전용

이 메서드는 MongoDB 검색하다 결과를 프로젝션할 때만 사용할 수 있습니다.

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 를 참조하세요.

참고

MongoDB 벡터 검색 전용

이 방법은 MongoDB 벡터 검색 결과를 프로젝션할 때만 사용할 수 있습니다.

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

MetaVectorSearchScore() 메서드를 사용하는 코드 예시 는 MongoDB 벡터 검색를 참조하세요.

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

참고

MongoDB 검색 전용

이 메서드는 MongoDB 검색하다 결과를 프로젝션할 때만 사용할 수 있습니다.

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

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

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

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

돌아가기

반환할 문서 지정

이 페이지의 내용