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

MongoDB $in 연산자로 특정 필드 값 조회하는 방법

MongoDB에서 조건에 맞는 특정 필드의 값만 가져오고 싶을 때 $in 연산자를 활용하면 매우 편리합니다. $in 연산자는 필드 값이 지정한 배열에 포함된 값 중 하나와 일치하는 문서만 골라내는 역할을 합니다.

테스트 컬렉션 생성 및 문서 삽입

먼저 실습을 위해 컬렉션을 생성하고 샘플 문서들을 삽입해 보겠습니다. 아래 예제에서는 StudentFirstName 필드에 인덱스도 함께 생성합니다.

> db.indexesDemo.createIndex({"StudentFirstName":1});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
> db.indexesDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e06de4d25ddae1f53b621dd")
}
> db.indexesDemo.insertOne({"StudentFirstName":"Chris","StudentLastName":"Brown"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e06de5825ddae1f53b621de")
}
> db.indexesDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e06de6725ddae1f53b621df")
}
> db.indexesDemo.insertOne({"StudentFirstName":"David","StudentLastName":"Miller"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e06de7225ddae1f53b621e0")
}

find() 메서드로 전체 문서 확인하기

삽입된 데이터가 정상적으로 저장되었는지 확인하려면 find() 메서드를 사용하면 됩니다.

> db.indexesDemo.find();

위 쿼리를 실행하면 다음과 같이 4개의 문서가 출력됩니다.

{ "_id" : ObjectId("5e06de4d25ddae1f53b621dd"), "StudentFirstName" : "John", "StudentLastName" : "Smith" }
{ "_id" : ObjectId("5e06de5825ddae1f53b621de"), "StudentFirstName" : "Chris", "StudentLastName" : "Brown" }
{ "_id" : ObjectId("5e06de6725ddae1f53b621df"), "StudentFirstName" : "John", "StudentLastName" : "Doe" }
{ "_id" : ObjectId("5e06de7225ddae1f53b621e0"), "StudentFirstName" : "David", "StudentLastName" : "Miller" }

$in 연산자로 특정 값 조회하기

이제 본격적으로 $in 연산자를 사용해 보겠습니다. 아래 쿼리는 StudentFirstName 값이 'John' 또는 'David'인 문서를 찾되, 두 번째 인수인 프로젝션(projection)을 통해 _id와 StudentLastName 필드는 결과에서 제외하고 StudentFirstName 값만 반환합니다.

> db.indexesDemo.find(
... { StudentFirstName: { $in: [ "John", "David" ] } },
... { _id: 0, StudentLastName: 0 }
... );

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

{ "StudentFirstName" : "David" }
{ "StudentFirstName" : "John" }
{ "StudentFirstName" : "John" }

결과 분석

출력 결과를 보면 'John'이라는 이름을 가진 문서가 두 개(John Smith, John Doe) 조회되고, 'David'(David Miller)도 함께 검색된 것을 확인할 수 있습니다. 반면 'Chris'는 $in 배열에 포함되어 있지 않기 때문에 결과에서 제외되었습니다.

이처럼 $in 연산자를 사용하면 여러 조건값을 한 번의 쿼리로 처리할 수 있으며, 프로젝션을 조합하면 필요한 필드 값만 깔끔하게 추출할 수 있습니다. 대량의 컬렉션에서 특정 값 목록에 해당하는 문서를 빠르게 찾아야 할 때 유용하게 활용할 수 있습니다.