Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 전체 필드가 아닌 특정 필드만 선택하는 방법

MongoDB에서 컬렉션의 모든 필드를 가져오지 않고 원하는 필드만 제외하거나 선택하고 싶다면 find() 메서드의 프로젝션(projection) 기능을 활용하면 됩니다. 제외하고 싶은 필드를 0으로 설정하면 해당 필드는 결과에서 제외됩니다.

1. 샘플 컬렉션 생성

먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.

> db.demo269.insertOne({StudentId:101,StudentSubject:"MySQL"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e481caa1627c0c63e7dbab4")
}
> db.demo269.insertOne({StudentId:102,StudentSubject:"Java"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e481cb11627c0c63e7dbab5")
}
> db.demo269.insertOne({StudentId:103,StudentSubject:"MongoDB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e481cb21627c0c63e7dbab6")
}
> db.demo269.insertOne({StudentId:104,StudentSubject:"C"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e481cb21627c0c63e7dbab7")
}

2. find()로 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.demo269.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e481caa1627c0c63e7dbab4"), "StudentId" : 101, "StudentSubject" : "MySQL" }
{ "_id" : ObjectId("5e481cb11627c0c63e7dbab5"), "StudentId" : 102, "StudentSubject" : "Java" }
{ "_id" : ObjectId("5e481cb21627c0c63e7dbab6"), "StudentId" : 103, "StudentSubject" : "MongoDB" }
{ "_id" : ObjectId("5e481cb21627c0c63e7dbab7"), "StudentId" : 104, "StudentSubject" : "C" }

3. 특정 필드를 제외한 조회 방법

이제 전체 필드가 아닌 원하는 필드만 남기고 나머지는 제외하는 쿼리를 살펴보겠습니다. 두 번째 인자에 제외할 필드를 0으로 지정합니다. 아래 예제에서는 StudentId와 자동 생성되는 _id 필드를 제외했습니다.

> db.demo269.find({},{"StudentId":0,_id:0});

실행 결과는 다음과 같습니다.

{ "StudentSubject" : "MySQL" }
{ "StudentSubject" : "Java" }
{ "StudentSubject" : "MongoDB" }
{ "StudentSubject" : "C" }

참고 사항

MongoDB 프로젝션에는 몇 가지 중요한 규칙이 있습니다.

- _id 필드: 유일하게 기본값으로 항상 반환되며, 명시적으로 _id: 0으로 설정해야 제외됩니다.
- 포함/제외 혼용 불가: _id를 제외한 나머지 필드는 포함(1) 또는 제외(0) 중 한 가지 방식으로만 지정해야 합니다.
- 포함 방식: 반대로 필요한 필드만 1로 지정하여 선택할 수도 있습니다. 예: db.demo269.find({}, {StudentSubject: 1})

이처럼 프로젝션을 활용하면 네트워크 트래픽과 메모리 사용량을 줄이고, 필요한 데이터만 효율적으로 조회할 수 있습니다.