Docs Menu
Docs Home
/ / /
Node.js
/ / /

반환할 필드 지정

이 페이지의 내용

  • 개요
  • 샘플 문서
  • 단일 필드
  • 여러 필드

프로젝션을 사용하여 읽기 작업으로 반환된 문서에 표시되는 필드를 제어합니다. 대부분의 요청에는 특정 필드만 필요하므로 프로젝션을 사용하면 불필요한 네트워크 대역폭 사용을 제한할 수 있습니다. 프로젝션은 두 가지 방식으로 작동합니다:

  • 값이 1인 필드를 명시적으로 포함합니다. 이렇게 하면 지정되지 않은 모든 필드가 암시적으로 제외되는 부작용이 있습니다.

  • 값이 0인 필드를 암시적으로 제외합니다. 이렇게 하면 지정되지 않은 모든 필드가 암시적으로 포함되는 부작용이 있습니다.

이 두 가지 프로젝션 방법은 상호 배타적입니다. 필드를 명시적으로 포함하는 경우 필드를 명시적으로 제외할 수 없으며 그 반대의 경우도 마찬가지입니다.

이 가이드의 예시를 따라 하려면 다음 코드 스니펫을 사용하여 과일을 설명하는 문서를 myDB.fruits 컬렉션에 삽입하세요.

const myDB = client.db("myDB");
const myColl = myDB.collection("fruits");
await myColl.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);

참고

쿼리 작업은 일치하는 문서가 포함된 커서 에 대한 참조를 반환할 수 있습니다. 커서 에 저장된 데이터를 검사하는 방법을 학습 보려면 커서 기본 사항 페이지를 참조하세요.

다음 쿼리에서는 각 문서의 name 필드만 반환하도록 프로젝션을 전달합니다.

// return only* the name field
const projection = { name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

프로젝션 문서에 name에 대한 1 값이 지정되어 있습니다. 이는 반환된 각 문서의 name 필드를 결과에 포함시키고 qtyrating 필드를 제외하도록 작업을 지시합니다. 쿼리 문서가 비어 있고 정렬 문서가 없는 상태에서 이 프로젝션을 find()에 전달하면 다음과 같은 결과가 나타납니다.

{ "_id": 1, "name": "apples" }
{ "_id": 2, "name": "bananas" }
{ "_id": 3, "name": "oranges" }
{ "_id": 4, "name": "avocados" }

이 프로젝션은 명시적으로 name 필드만 포함했지만 쿼리는 _id 필드도 반환했습니다.

이는 _id 필드가 특별한 경우이기 때문에 발생합니다. 즉, 명시적으로 달리 지정하지 않는 한 항상 모든 쿼리에 포함됩니다. 그 이유는 _id가 각 문서의 고유 식별자이며 쿼리를 구성할 때 매우 유용할 수 있는 속성이기 때문입니다. movies 컬렉션은 이 속성이 왜 유용한지를 보여주는 좋은 예입니다. 리메이크나 별도 작품에서 같은 영화 제목을 사용하는 경우가 있기 때문에 특정 영화를 가려내려면 고유한 _id 값이 필요합니다. 프로젝션에서 상호 배타적인 포함 및 제외 동작에 대한 유일한 예외는 _id입니다. 반환된 문서에 _id가 표시되지 않도록 하려면 다른 필드를 명시적으로 포함하더라도 _id를 명시적으로 제외할 수 있습니다.

// return only the name field
const projection = { _id: 0, name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

프로젝션 문서는 name에 대해 1 값을 지정하고 _id에 대해 0 값을 지정합니다. 이는 반환된 각 문서의 name 필드를 결과에 포함하고 _id, qtyrating 필드를 제외하도록 작업에 지시합니다. 쿼리 문서가 비어 있고 정렬 문서가 없는 상태에서 이 프로젝션을 find()에 전달하면 다음과 같은 결과가 나타납니다.

{ "name": "apples" }
{ "name": "bananas" }
{ "name": "oranges" }
{ "name": "avocados" }

프로젝션에 포함할 필드를 여러 개 지정할 수도 있습니다. 참고: 프로젝션에서 필드를 지정하는 순서는 필드가 반환되는 순서를 변경하지 않습니다.

const projection = { _id: 0, rating: 1, name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

프로젝션에 포함할 두 개의 필드를 식별하는 이 예시는 다음과 같은 결과를 산출합니다.

{ "name": "apples", "rating": 3 }
{ "name": "bananas", "rating": 1 }
{ "name": "oranges", "rating": 2 }
{ "name": "avocados", "rating": 5 }

추가 프로젝션 예제는 MongoDB 매뉴얼 페이지의 쿼리에서 반환할 프로젝트 필드를 참조하세요.

돌아가기

반환되는 결과 수 제한