Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

$project (집계)

$project

요청된 필드가 있는 문서를 파이프라인의 다음 단계로 전달합니다. 지정된 필드는 입력 문서의 기존 필드일 수도 있고 새로 계산된 필드일 수도 있습니다.

다음 환경에서 호스팅되는 배포에 $project 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

  • MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전

  • MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전

$project 단계의 프로토타입 형식은 다음과 같습니다.

{ $project: { <specification(s)> } }

$project는 필드 포함, _id 필드 표시 안 함, 새 필드 추가, 기존 필드 값 재설정을 지정할 수 있는 문서를 사용합니다. 또는 필드 제외를 지정할 수 있습니다.

$project 사양의 형식은 다음과 같습니다.

형식
설명

<field>: <1 or true>

필드 포함 여부를 지정합니다. 0이 아닌 정수도 true로 처리됩니다.

_id: <0 or false>

_id 필드의 억제를 지정합니다.

필드 조건부로 제외하려면 변수를 대신 REMOVE 사용하세요. 자세한내용은 조건부로 필드 제외를 참조하세요.

<field>: <expression>

새 필드를 추가하거나 기존 필드의 값을 재설정합니다.

표현식 $$REMOVE로 평가되면 해당 필드 출력에서 제외됩니다. 자세한내용은 조건부로 필드 제외를 참조하세요.

<field>: <0 or false>

필드 제외 여부를 지정합니다.

필드 조건부로 제외하려면 변수를 대신 REMOVE 사용하세요. 자세한내용은 조건부로 필드 제외를 참조하세요.

이외의 필드 제외하도록 지정하면 _id 다른 지정 양식을 $project 사용할 수 없습니다. 이 제한은 변수를 사용하여 필드 를 조건부로 제외하는 경우에는 적용 되지 않습니다.REMOVE

필드를 제외하려면 $unset 단계도 참조하세요.

  • _id 필드는 기본적으로 출력 문서에 포함됩니다. 입력 문서의 다른 필드를 출력 문서에 포함하려면 $project에 포함을 명시적으로 지정해야 합니다.

  • 문서에 존재하지 않는 필드의 포함을 지정하면 $project(은)는 해당 필드 포함을 무시하고 해당 필드를 문서에 추가하지 않습니다.

_id 필드는 출력 문서에 포함되도록 기본 설정되어 있습니다. 출력 문서에서 _id 필드를 제외하려면 $project에서 _id 필드를 사용하지 않음을 명시적으로 지정해야 합니다.

필드 제외를 지정하면 다른 모든 필드가 출력 문서에 반환됩니다.

{ $project: { "<field1>": 0, "<field2>": 0, ... } } // Return all but the specified fields

_id 이외의 필드를 제외하도록 지정하면 다른 $project 지정 양식을 사용할 수 없습니다. 즉, 필드를 제외하면 필드 포함을 지정하거나 기존 필드 값을 재설정하거나 새 필드를 추가할 수도 없습니다. 이 제한은 REMOVE 변수를 사용하여 필드를 조건부로 제외하는 경우에는 적용되지 않습니다.

필드를 제외하려면 $unset 단계도 참조하세요.

집계 표현식에서 변수 REMOVE(을)를 사용하여 조건부로 필드를 억제할 수 있습니다. 예시를 보려면 조건부로 필드 제외를 참조하세요.

참고

MongoDB는 문서에 새 필드를 추가할 수 있는 $addFields도 제공합니다.

새 필드를 추가하거나 기존 필드의 값을 재설정하려면 필드 이름을 지정하고 해당 값을 특정 표현식으로 설정합니다. 표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.

필드를 리터럴로 리졸브되는 표현식으로 설정하는 대신 필드 값을 숫자 또는 부울 리터럴로 직접 설정하려면 $literal 연산자를 사용합니다. 그렇지 않으면 $project가 숫자 또는 부울 리터럴을 필드를 포함하거나 제외할 때 플래그로 처리합니다.

새 필드를 지정하고 해당 값을 기존 필드의 필드 경로로 설정하면 필드 이름을 효과적으로 변경할 수 있습니다.

$project 단계는 대괄호 [](을)를 사용해 새 배열 필드를 직접 만들 수 있도록 지원합니다. 문서에 존재하지 않는 배열 필드를 지정하는 경우, 연산은 해당 필드의 값으로 null(을)를 대체합니다. 예시는 새 배열 필드 프로젝트를 참조하세요.

배열 인덱스는 $project 단계와 함께 사용할 수 없습니다. 자세한 내용은 배열 인덱스가 지원되지 않음을 참조하세요.

내장된 문서 내에서 필드를 프로젝션하거나 추가/재설정할 때 다음과 같이 점 표기법을 사용할 수 있습니다.

"contact.address.country": <1 or 0 or expression>

또는 필드를 중첩할 수도 있습니다:

contact: { address: { country: <1 or 0 or expression> } }

필드를 중첩할 때 내장된 문서 내에서 점 표기법을 사용하여 필드를 지정할 수 없습니다(예: contact: { "address.country": <1 or 0 or expression> }은(는) 유효하지 않습니다).

내장된 문서와 이 내장된 문서 내의 필드를 동일한 프로젝션에 모두 지정할 수는 없습니다.

다음 $project 단계는 내장된 contact 문서와 contact.address.country 필드를 모두 프로젝션하려고 시도하기 때문에 실패하며 Path collision 오류를 반환합니다.

{ $project: { contact: 1, "contact.address.country": 1 } }

이 오류는 상위 문서와 임베디드 필드가 지정된 순서와 관계없이 발생합니다. 다음 $project도 동일한 오류로 인해 실패합니다.

{ $project: { "contact.address.country": 1, contact: 1 } }

$project 단계를 사용하는 경우 이 단계는 일반적으로 파이프라인의 마지막 단계로, 클라이언트에 반환할 필드를 지정하는 데 사용됩니다.

파이프라인의 시작 또는 중간에 $project 단계를 사용하여 후속 파이프라인 단계로 전달되는 필드 수를 줄이면 데이터베이스에서 이 최적화를 자동으로 수행하므로 성능이 향상되지 않을 수 있습니다.

MongoDB는 $project 단계에 빈 문서가 전달되면 오류를 반환합니다.

예를 들어 다음 파이프라인을 실행하면 오류가 발생합니다.

db.myCollection.aggregate( [ {
$project: { }
} ] )

배열 인덱스는 $project 단계와 함께 사용할 수 없습니다. 자세한 내용은 배열 인덱스가 지원되지 않음을 참조하세요.

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5
}

다음 $project 단계는 출력 문서에 _id, title, author 필드만 포함합니다.

db.books.aggregate( [ { $project : { title : 1 , author : 1 } } ] )

이 연산을 수행하면 다음 문서가 생성됩니다.

{ "_id" : 1, "title" : "abc123", "author" : { "last" : "zzz", "first" : "aaa" } }

_id 필드는 기본적으로 항상 포함됩니다. $project 단계의 출력 문서에서 _id 필드를 제외하려면 프로젝션 문서에서 _id 필드를 0으로 설정하여 제외를 지정합니다.

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5
}

다음 $project 단계에서는 출력 문서에 _id 필드를 제외하지만 titleauthor 필드를 포함합니다.

db.books.aggregate( [ { $project : { _id: 0, title : 1 , author : 1 } } ] )

이 연산을 수행하면 다음 문서가 생성됩니다.

{ "title" : "abc123", "author" : { "last" : "zzz", "first" : "aaa" } }

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5,
lastModified: "2016-07-28"
}

다음 $project 단계에서는 출력에서 lastModified 필드를 제외합니다.

db.books.aggregate( [ { $project : { "lastModified": 0 } } ] )

필드를 제외하려면 $unset 단계도 참조하세요.

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5,
lastModified: "2016-07-28"
}

다음 $project 단계에서는 출력에서 author.firstlastModified 필드를 제외합니다.

db.books.aggregate( [ { $project : { "author.first" : 0, "lastModified" : 0 } } ] )

또는 문서에 제외 사양을 중첩할 수도 있습니다.

db.bookmarks.aggregate( [ { $project: { "author": { "first": 0}, "lastModified" : 0 } } ] )

두 사양 모두 동일한 출력이 생성됩니다.

{
"_id" : 1,
"title" : "abc123",
"isbn" : "0001122223334",
"author" : {
"last" : "zzz"
},
"copies" : 5,
}

필드를 제외하려면 $unset 단계도 참조하세요.

집계 표현식에서 변수 REMOVE를 사용하여 조건부로 필드를 억제할 수 있습니다.

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5,
lastModified: "2016-07-28"
}
{
"_id" : 2,
title: "Baked Goods",
isbn: "9999999999999",
author: { last: "xyz", first: "abc", middle: "" },
copies: 2,
lastModified: "2017-07-21"
}
{
"_id" : 3,
title: "Ice Cream Cakes",
isbn: "8888888888888",
author: { last: "xyz", first: "abc", middle: "mmm" },
copies: 5,
lastModified: "2017-07-22"
}

다음 $project 단계에서는 REMOVE 변수를 사용해 author.middle 필드가 ""와 동일한 경우에만 제외합니다.

db.books.aggregate( [
{
$project: {
title: 1,
"author.first": 1,
"author.last" : 1,
"author.middle": {
$cond: {
if: { $eq: [ "", "$author.middle" ] },
then: "$$REMOVE",
else: "$author.middle"
}
}
}
}
] )

집계 연산을 수행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : 1, "title" : "abc123", "author" : { "last" : "zzz", "first" : "aaa" } }
{ "_id" : 2, "title" : "Baked Goods", "author" : { "last" : "xyz", "first" : "abc" } }
{ "_id" : 3, "title" : "Ice Cream Cakes", "author" : { "last" : "xyz", "first" : "abc", "middle" : "mmm" } }

$addFields와 비교

$addFields 또는 $project 단계를 사용하여 문서 필드를 제거할 수 있습니다. 파이프라인과 원본 문서를 얼마나 보존할 것인지에 따라 최적의 접근 방식이 달라질 수 있습니다.

$addFields 단계에서 $$REMOVE 사용하는 예시를 보려면 필드 제거를 참조하세요.

다음 문서가 포함된 bookmarks collection을 생각해 보세요.

{ _id: 1, user: "1234", stop: { title: "book1", author: "xyz", page: 32 } }
{ _id: 2, user: "7890", stop: [ { title: "book2", author: "abc", page: 5 }, { title: "book3", author: "ijk", page: 100 } ] }

stop 필드의 내장된 문서에 title 필드만 포함하려면 점 표기법을 사용하면 됩니다.

db.bookmarks.aggregate( [ { $project: { "stop.title": 1 } } ] )

또는 문서에 포함 사양을 중첩할 수 있습니다.

db.bookmarks.aggregate( [ { $project: { stop: { title: 1 } } } ] )

두 사양 모두 다음과 같은 문서가 생성됩니다.

{ "_id" : 1, "stop" : { "title" : "book1" } }
{ "_id" : 2, "stop" : [ { "title" : "book2" }, { "title" : "book3" } ] }

다음 문서가 포함된 collection을 고려합니다:books

{
"_id" : 1,
title: "abc123",
isbn: "0001122223334",
author: { last: "zzz", first: "aaa" },
copies: 5
}

다음 $project 단계에서는 새 필드 isbn, lastNamecopiesSold를 추가합니다.

db.books.aggregate(
[
{
$project: {
title: 1,
isbn: {
prefix: { $substr: [ "$isbn", 0, 3 ] },
group: { $substr: [ "$isbn", 3, 2 ] },
publisher: { $substr: [ "$isbn", 5, 4 ] },
title: { $substr: [ "$isbn", 9, 3 ] },
checkDigit: { $substr: [ "$isbn", 12, 1] }
},
lastName: "$author.last",
copiesSold: "$copies"
}
}
]
)

이 연산을 수행하면 다음 문서가 생성됩니다.

{
"_id" : 1,
"title" : "abc123",
"isbn" : {
"prefix" : "000",
"group" : "11",
"publisher" : "2222",
"title" : "333",
"checkDigit" : "4"
},
"lastName" : "zzz",
"copiesSold" : 5
}

예를 들어 컬렉션에 다음 문서가 포함되어 있다고 가정해 보겠습니다.

{ "_id" : ObjectId("55ad167f320c6be244eb3b95"), "x" : 1, "y" : 1 }

다음 작업은 xy 필드를 새 필드 myArray의 요소로 프로젝트합니다.

db.collection.aggregate( [ { $project: { myArray: [ "$x", "$y" ] } } ] )

연산은 다음 문서를 반환합니다.

{ "_id" : ObjectId("55ad167f320c6be244eb3b95"), "myArray" : [ 1, 1 ] }

배열 사양에 문서 에 존재하지 않는 필드가 포함된 경우 작업은 해당 필드 의 값으로 null 을(를) 대체합니다.

예를 들어 위와 동일한 문서가 주어졌을 때 다음 연산은 x, y 필드와 존재하지 않는 필드 $someField를 새 필드 myArray의 요소로 투영합니다.

db.collection.aggregate( [ { $project: { myArray: [ "$x", "$y", "$someField" ] } } ] )

연산은 다음 문서를 반환합니다.

{ "_id" : ObjectId("55ad167f320c6be244eb3b95"), "myArray" : [ 1, 1, null ] }

배열 인덱스는 $project 단계와 함께 사용할 수 없습니다. 이 섹션에서 예시를 함께 살펴봅시다.

다음 pizzas 컬렉션을 만듭니다:

db.pizzas.insert( [
{ _id: 0, name: [ 'Pepperoni' ] },
] )

다음 예시는 피자를 반환합니다.

db.pizzas.aggregate( [
{ $project: { x: '$name', _id: 0 } },
] )

예시 출력에서는 피자가 반환됩니다.

[ { x: [ 'Pepperoni' ] } ]

다음 예시는 배열 인덱스($name.0)를 사용해 피자를 반환하려고 시도합니다.

db.pizzas.aggregate( [
{ $project: { x: '$name.0', _id: 0 } },
] )

예시 출력에서는 피자가 반환되지 않습니다:

[ { x: [] } ]

이 페이지의 C# 예제에서는 Atlas 샘플 데이터 세트sample_mflix 데이터베이스 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 MongoDB .NET/ C# 드라이버 문서에서 시작하기 를 참조하세요.

다음 MovieImdbData 클래스는 sample_mflix.movies 컬렉션 의 문서를 모델링합니다.

public class Movie
{
public ObjectId Id { get; set; }
public string Title { get; set; }
public List<string> Genres { get; set; }
public List<string> Directors { get; set; }
public List<string> Writers { get; set; }
public string Type { get; set; }
public string Plot { get; set; }
public ImdbData Imdb { get; set; }
public List<string> Cast { get; set; }
}
public class ImdbData
{
public string Id { get; set; }
public int Votes { get; set; }
public float Rating { get; set; }
}

참고

파스칼 케이스용 ConventionPack

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

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

MongoDB .NET/ C# 운전자 사용하여 집계 파이프라인 에 $project 단계를 추가하려면 PipelineDefinition 객체 에서 Project() 메서드를 호출하고 ProjectionDefinitionBuilder<TDocument> 객체 전달합니다. TDocument 는 컬렉션 의 문서를 나타내는 클래스입니다.

다음 섹션에서는 $project 단계의 출력 문서를 사용자 지정할 수 있는 다양한 방법을 보여줍니다.

.NET/ C# 운전자 사용할 때 특정 필드를 포함하려면 프로젝션 빌더에서 Include() 메서드를 호출합니다. Include() 호출을 체인으로 연결하여 여러 필드를 포함할 수 있습니다.

다음 코드 예시 _id, plottitle 필드만 포함된 문서 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie> ()
.Project(
Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 다음 문서 를 반환합니다.

{
"_id" : { "$oid" : "573a1390f29313caabcd42e8" },
"plot" : "A group of bandits stage a brazen train hold-up, only to find a
determined posse hot on their heels.",
"title" : "The Great Train Robbery"
}

.NET/ C# 운전자 사용할 때 결과 문서에서 필드 제외하려면 프로젝션 빌더에서 Exclude() 메서드를 호출합니다. Exclude() 호출을 연결하여 여러 필드를 제외할 수 있습니다.

다음 코드 예시 Type 필드 제외하는 문서 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie>()
.Project(
Builders<Movie>.Projection
.Exclude(m => m.Type)
);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

기본값 으로 결과 문서에는 항상 _id 필드 포함됩니다. 다음 코드 예시 _id 필드 제외하고 plottitle 필드를 포함하는 문서 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie> ()
.Project(
Builders<Movie>.Projection
.Exclude(m => m.Id)
.Include(m => m.Title)
.Include(m => m.Plot)
);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 은 다음 문서 생성합니다.

{
"plot" : "A group of bandits stage a brazen train hold-up, only to find a
determined posse hot on their heels.",
"title" : "The Great Train Robbery"
}

.NET/ C# 운전자 사용할 때 내장된 문서 에서 필드 제외하려면 프로젝션 빌더에서 Exclude() 메서드를 호출하고 해당 클래스 속성 에 경로를 전달합니다. Exclude() 호출을 연결하여 여러 필드를 제외할 수 있습니다.

다음 코드 예시 imdb.idtype 필드를 제외하는 문서 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie> ()
.Project(
Builders<Movie>.Projection
.Exclude("Imdb.id")
.Exclude(m => m.Type)
);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 의 출력은 다음과 같습니다.

{
"plot" : "A group of bandits stage a brazen train hold-up, only to find a
determined posse hot on their heels.",
"title" : "The Great Train Robbery"
...
"imdb" : { "rating" : 7.4000000000000004, "votes" : 9847 }
}

참고

임베디드 ID 필드에 문자열 사용

내장된 문서 에서 ID 필드 프로젝트 하려면 필드 이름을 lambda 표현식 아닌 문자열로 지정합니다.

집계 표현식에서 변수 를 사용하여 REMOVE 조건부로 필드 표시하지 않을 수 있습니다.

var stage = new BsonDocument
{
{ "title", 1 },
{ "imdb.id", 1 },
{ "imdb.rating", 1 },
{
"imdb.votes", new BsonDocument("$cond", new BsonDocument
{
{ "if", new BsonDocument("$eq", new BsonArray { "", "$imdb.votes" }) },
{ "then", "$$REMOVE" },
{ "else", "$imdb.votes" }
})
}
};
var pipeline = new EmptyPipelineDefinition<Movie>()
.Project(stage)
.Sample(1);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

참고

조건부 제외를 위한 빌더 없음

.NET/ C# 운전자 조건부로 필드를 제외하는 빌더를 제공하지 않기 때문에 앞의 예시 객체를 사용합니다. 다른 MongoDB 언어 드라이버에서 이 기능 BsonDocument 지원 수 있습니다. 자세한 내용은 MongoDB 운전자 설명서를 참조하세요.

샘플링된 문서 에 imdb.votes 필드 포함된 경우 파이프라인 다음과 유사한 문서 반환합니다.

{
"_id" : { "$oid" : "573a1390f29313caabcd42e8" },
"title" : "The Great Train Robbery"
"imdb" : { "rating" : 7.4000000000000004, "id" : 439, "votes" : 9847 }
}

문서 에 imdb.votes 필드 포함되어 있지 않으면 파이프라인 다음과 유사한 문서 반환합니다.

{
"_id" : { "$oid" : "573a1398f29313caabce94a3" },
"title" : "This Is Spinal Tap",
"imdb" : { "rating" : 8.0, "id" : 88258 }
}

.NET/ C# 운전자 사용할 때 결과 문서에 계산된 필드를 포함하려면 프로젝션 빌더에서 Expression() 메서드를 호출하고 계산된 필드를 포함하는 표현식 전달합니다. 유형 안전성을 강화하기 위해 다음 ProjectedMovie 클래스와 같이 결과 문서에 대한 모델 클래스를 정의할 수 있습니다.

public class ProjectedMovie
{
public ObjectId Id { get; set; }
public string Title { get; set; }
public string LeadActor { get; set; }
public List<string> Crew { get; set; }
}

다음 코드 예시 여러 계산된 필드를 포함하는 문서 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie>()
.Project(
Builders<Movie>
.Projection
.Expression(m => new ProjectedMovie
{
Id = m.Id,
Title = m.Title,
LeadActor = m.Cast[0],
})
);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 은 다음 문서 생성합니다.

{
"_id" : { "$oid" : "573a1390f29313caabcd42e8" },
"title" : "The Great Train Robbery"
"leadActor" : "A.C. Abadie",
...
}

.NET/ C# 운전자 사용할 때 결과 문서에서 새 배열 필드를 프로젝트 하려면 프로젝션 빌더에서 Expression() 메서드를 호출하고 새 배열 필드를 포함하는 표현식 전달합니다. 유형 안전성을 강화하기 위해 다음 ProjectedMovie 클래스와 같이 결과 문서에 대한 모델 클래스를 정의할 수 있습니다.

public class ProjectedMovie
{
public ObjectId Id { get; set; }
public string Title { get; set; }
public string LeadActor { get; set; }
public List<string> Crew { get; set; }
}

다음 코드 예시 directorswriters 필드의 값이 포함된 새 배열 필드crew가 포함된 문서를 생성합니다.

var pipeline = new EmptyPipelineDefinition<Movie> ()
.Project(
Builders<Movie>
.Projection
.Expression(m => new ProjectedMovie
{
Id = m.Id,
Title = m.Title,
LeadActor = m.Cast[0],
Crew = m.Directors.Concat(m.Writers).ToList()
}
)
)
.Sample(1);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 다음과 유사한 문서 반환합니다.

{
"_id" : { "$oid" : "573a1395f29313caabce2297" },
"title" : "The Chalk Garden",
"leadActor" : "Deborah Kerr",
"crew" : ["Ronald Neame", "John Michael Hayes (screenplay)", "Enid Bagnold (from the play by)"]
}

배열 사양에 문서 에 존재하지 않는 필드가 포함된 경우 파이프라인 해당 필드 의 값으로 null 을(를) 대체합니다. 예시 들어, 다음 코드 예시 directors, writers 필드 및 존재하지 않는 필드makeupArtistscrew라는 새 필드 의 요소로 프로젝션합니다.

var stage = new BsonDocument
{
{ "crew", new BsonArray { "$directors", "$writers", "$makeupArtists" } }
};
var pipeline = new EmptyPipelineDefinition<Movie>()
.Project(stage)
.Sample(1);
var result = movieCollection.Aggregate(pipeline).FirstOrDefault();

파이프라인 다음과 유사한 문서 반환합니다.

{
"_id" : { "$oid" : "573a1399f29313caabced0d9" },
"crew" : [["Bill Kroyer"], ["Jim Cox (screenplay)", "Diana Young (original stories)"], null]
}

참고

빌더 클래스로 누락된 필드 방지

앞의 예시 객체를 사용하는데,BsonDocument 이는 빌더 사용하여 배열 에 누락된 필드 추가하려고 하면 .NET/ C# 운전자 컴파일 타임 오류를 발생시키기 때문입니다. 다른 MongoDB 언어 드라이버에서 이 기능 지원 수 있습니다. 자세한 내용은 MongoDB 운전자 설명서를 참조하세요.

돌아가기

$planCacheStats

이 페이지의 내용