MongoDB의 프로젝션 [예제 포함]
게시 됨: 2020-09-15MongoDB는 빅 데이터를 처리하고 관리하는 가장 유명한 현대 데이터베이스 중 하나입니다. 문서와 같은 JSON을 사용하여 데이터를 보다 쉽게 관리할 수 있는 NoSQL 문서 지향 데이터베이스입니다.
다양한 MongoDB 프로젝트 아이디어 를 쉽게 구현할 수 있습니다. 그러나 MongoDB에도 몇 가지 단점이 있습니다. 기본적으로 특정 문서에 대한 모든 쿼리는 모든 데이터를 표시합니다. 이 문제는 MongoDB 프로젝션 의 도움으로 해결됩니다 .
목차
MongoDB에서 프로젝션이란 무엇입니까?
MongoDB의 프로젝션 은 데이터 출력을 모든 필드를 표시하는 대신 지정된 필드로 제한합니다. 이것은 find() 메소드의 도움으로 수행됩니다. find() 메소드는 특정 출력 필드를 포함하거나 제외할 수 있는 선택적 매개변수를 허용합니다. MongoDB에서 프로젝션 을 사용하는 방법을 자세히 살펴보겠습니다 .
Find() 메서드의 구문
MongoDB의 투영 은 find() 메서드의 도움으로 이루어지며 구문은 다음과 같습니다.
DB collection_name .find({}, { field_Key:1 또는 0 })
위 구문에서 collection_name 은 데이터를 검색해야 하는 문서입니다. 그런 다음 find() 메소드에 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 쿼리를 수락하고 두 번째 매개변수는 프로젝션에 사용됩니다. 구문 의 field_Key 는 포함하거나 제외하려는 필드의 이름입니다.

각 field_ Key 에 대해 부울 값을 전달해야 합니다 . 이 값은 필드를 포함할지 제외할지 여부를 정의합니다. 필드에 대해 1을 입력하면 결과에 표시되고 0을 포함하면 숨겨집니다.
예제 데이터베이스
이 문서 전체에서 참조할 수 있도록 데이터베이스에 예제 문서를 만들어 보겠습니다.
db.example.studentData([
{_id: ObjectId("59kf63795bc1d"), student_name: "Alexander", student_id: 01, student_status: "A", student_age: 22}
{_id: ObjectId("59ke62794bc1d"), student_name: "Steve", student_id: 02, student_status: "A", student_age: 23}
{_id: ObjectId("59kg73795bf1e"), student_name: "Luke", student_id: 03, student_status: "A", student_age: 21}
{_id: ObjectId("59kb69995ah1d"), student_name: "Bravo", student_id: 04, student_status: "B", student_age: 25}
])
이것은 모든 예제에서 참조로 사용할 example이라는 데이터베이스 문서입니다.
MongoDB에서 프로젝션이 있거나 없는 데이터 검색
1. 프로젝션 없이 검색하는 구문
학생 상태가 "A"인 학생의 모든 필드(프로젝션을 사용하지 않음) 검색.
db.example.find({학생_상태: "A"})
이것은 SQL의 WHERE student_status = "A" 쿼리의 예에서 Select *에 해당합니다. MongoDB에서 프로젝션 없이 데이터를 검색 하면 다음 결과가 생성됩니다.
{“_id”: ObjectId(“59kf63795bc1d”), “student_name”: “Alexander”, “student_id”: 01, “student_status”: “A”, student_age: 22}
{“_id”: ObjectId(“59ke62794bc1d”), “student_name”: “Steve”, “student_id”: 02, “student_status”: “A”, “student_age”: 23}
{“_id”: ObjectId(“59kg73795bf1e”), “student_name”: “루크”, “student_id”: 03, “student_status”: “A”, student_age: 21}
기본적으로 student_status = "A"인 데이터의 모든 필드를 표시합니다. 출력 필드를 제한하기 위해 MongoDB에서 프로젝션을 사용할 수 있습니다 .
2. 프로젝션으로 검색하는 구문
모든 학생의 student_name 및 student_status를 검색합니다.

db.example.find({}, {학생_이름: 1, 학생_상태: 1})
그러면 다음 결과가 표시됩니다.
{“_id”: ObjectId(“59kf63795bc1d”), “student_name”: “Alexander”, “student_status”: “A”}
{“_id”: ObjectId(“59ke62794bc1d”), “student_name”: “Steve”, “student_status”: “A”}
{“_id”: ObjectId(“59kg73795bf1e”), “student_name”: “루크”, “student_status”: “A”}
{"_id": ObjectId("59kb69995ah1d"), 학생 이름: "브라보", 학생 상태: "B"}
_id는 우리가 억제하지 않는 한 MongoDB에서 프로젝션 을 사용하는 동안 기본적으로 표시 됩니다.
MongoDB에서 프로젝션을 사용하는 동안 _id 억제
기본 _id를 억제하고 모든 학생의 student_id, student_name 및 student_status를 표시합니다.
db.example.find({}, {_id: 0, 학생 ID: 1, 학생 이름: 1, 학생 상태: 1})
그러면 다음과 같은 결과가 생성됩니다.
{“student_id”: 01, “student_name”: “Alexander”, “student_status”: “A”}
{“student_id”: 02, “student_name”: “Steve”, “student_status”: “A”}
{“student_id”: 03, “student_name”: “루크”, “student_status”: “A”}
{“student_id”: 04, “student_name”: “Bravo”, student_status: “B”}
3. 포함과 제외의 결합
모든 학생의 student_name 및 student_status를 포함하여 _id 및 student_id를 제외합니다.
db.example.find({}, {_id: 0, 학생 ID: 0, 학생 이름: 1, 학생 상태: 1})
그러면 다음과 같은 결과가 생성됩니다.
오류: 오류: {
"waitedMS" : NumberLong(0),
"확인": 0,
"errmsg": "프로젝션은 포함과 제외를 혼합할 수 없습니다.",
"코드": 2
}
MongoDB 프로젝션 을 사용하는 동안 포함과 제외를 결합 하면 동일한 쿼리에서 둘 다 수행할 수 없기 때문에 오류가 발생합니다. _id 필드는 이 규칙의 예외입니다.
_id를 표시하지 않고 일부 다른 필드를 표시한 이전 예에서 포함 및 제외 조합을 사용했으며 제대로 작동했음을 알아차렸을 것입니다. 규칙에 대한 예외 때문에 _id를 제외하고 나머지 필드를 포함했습니다.
4. 제외를 통해 MongoDB에서 프로젝션 지정
모든 학생의 _id 및 student_status를 제외하고 다른 필드를 표시합니다.
db.example.find({}, {_id: 0, 학생 상태: 0})
{“학생 이름”: “알렉산더”, “학생 ID”: 01, “학생 나이”: 22}
{“student_name”: “스티브”, “student_id”: 02, “student_age”: 23}
{“student_name”: “루크”, “student_id”: 03, “student_age”: 21}
{“학생_이름”: “브라보”, “학생_ID”: 04, “학생_나이”: 25}
4개의 투영 연산자를 사용하여 출력 필드를 제한할 수도 있지만 find() 메서드에서는 지원되지 않습니다. 사용할 수 있는 투영 연산자는 $, $elemMatch, $slice 및 $meta입니다.

또한 읽기: MongoDB 실제 사용 사례
결론
MongoDB에서 프로젝션을 사용 하면 프런트 엔드에서 데이터 표시를 제어할 수 있으므로 실제 사용 사례 가 늘어납니다 . MongoDB는 최근 몇 년 동안 몇 가지 이정표를 달성했습니다. 이로 인해 MongoDB의 미래 범위가 밝아졌으며 많은 기업에서 MongoDB에 대한 지식을 갖춘 풀 스택 개발자를 찾고 있습니다.
따라서 지금이 이력서에 MongoDB의 기술을 포함할 좋은 시기입니다. 그러나 오늘날과 같이 경쟁이 치열한 세상에서는 데이터베이스를 관리하는 것만으로는 충분하지 않습니다. 따라서 풀스택 개발자가 되는 것을 목표로 하거나 비즈니스 분석을 학습하여 관리 중인 데이터를 이해 및 분석하고 비즈니스가 잘 수행되도록 하는 것이 도움이 될 것입니다. upGrad 는 시작하는 데 도움이 될 수 있습니다.
upGrad는 실무 경험 및 직업 지원과 함께 자세한 학습 소스를 제공합니다. 우리는 최고의 교육 및 인증을 얻기 위해 여러 기관과 협력했습니다. 비즈니스 분석 인증 과정 을 선택 하거나 전체 스택 소프트웨어 개발 PG 디플로마 과정 을 선택할지 선택할 수 있습니다 . 인생에서 경력으로 추구하고자 하는 것이 무엇이든 저희가 준비했습니다.
세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
