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

MongoDB에서 ID 목록으로 문서를 찾는 방법 – $in 연산자 완벽 가이드

MongoDB에서 여러 개의 ID에 해당하는 문서를 한 번에 조회하려면 $in 연산자를 사용하면 됩니다. $in 연산자는 배열로 전달된 값 중 하나라도 일치하는 모든 문서를 반환하기 때문에, ID 목록 기반 검색에 가장 널리 쓰이는 방법입니다.


개념을 쉽게 이해할 수 있도록, 먼저 컬렉션을 생성하고 샘플 문서를 삽입한 뒤 실제 조회 과정을 단계별로 살펴보겠습니다.


1단계: 컬렉션 생성 및 문서 삽입


insertOne() 메서드를 사용해 'findListOfIdsDemo' 컬렉션에 학생 정보 문서 5개를 순차적으로 추가합니다.

> db.findListOfIdsDemo.insertOne({"StudentName":"Carol","StudentAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ecadd2f684a30fbdfd575")
}
> db.findListOfIdsDemo.insertOne({"StudentName":"Bob","StudentAge":25});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ecae42f684a30fbdfd576")
}
> db.findListOfIdsDemo.insertOne({"StudentName":"David","StudentAge":22});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ecaed2f684a30fbdfd577")
}
> db.findListOfIdsDemo.insertOne({"StudentName":"John","StudentAge":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ecaf82f684a30fbdfd578")
}
> db.findListOfIdsDemo.insertOne({"StudentName":"Mike","StudentAge":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8ecb092f684a30fbdfd579")
}

2단계: 저장된 전체 문서 확인


find() 메서드에 pretty()를 함께 사용하면 컬렉션의 모든 문서를 읽기 좋은 형태로 출력할 수 있습니다.

> db.findListOfIdsDemo.find().pretty();

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

{
    "_id" : ObjectId("5c8ecadd2f684a30fbdfd575"),
    "StudentName" : "Carol",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5c8ecae42f684a30fbdfd576"),
    "StudentName" : "Bob",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c8ecaed2f684a30fbdfd577"),
    "StudentName" : "David",
    "StudentAge" : 22
}
{
    "_id" : ObjectId("5c8ecaf82f684a30fbdfd578"),
    "StudentName" : "John",
    "StudentAge" : 20
}
{
    "_id" : ObjectId("5c8ecb092f684a30fbdfd579"),
    "StudentName" : "Mike",
    "StudentAge" : 23
}

3단계: $in 연산자로 ID 목록 조회하기


이제 본격적으로 ID 목록을 이용해 문서를 조회해 보겠습니다. MongoDB의 _id 필드는 일반 문자열이 아닌 ObjectId 타입이므로, 반드시 ObjectId()로 변환한 후 $in 연산자에 전달해야 한다는 점에 유의하세요.

> var listOfIds = ['5c8ecae42f684a30fbdfd576', '5c8ecaf82f684a30fbdfd578'];
> var documentIds = listOfIds.map(function(myId) { return ObjectId(myId); });
> db.findListOfIdsDemo.find({_id: {$in: documentIds }}).pretty();

위 코드의 동작 방식을 정리하면 다음과 같습니다.

  • listOfIds: 조회하고 싶은 문서의 ID를 문자열 형태로 담고 있는 배열입니다.
  • documentIds: map() 함수를 통해 각 문자열 ID를 ObjectId 타입으로 변환한 배열입니다.
  • $in 연산자: _id 값이 documentIds 배열에 포함된 문서만 필터링하여 반환합니다.

실행 결과, 지정한 두 개의 ID에 해당하는 문서만 정확하게 조회되는 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5c8ecae42f684a30fbdfd576"),
    "StudentName" : "Bob",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c8ecaf82f684a30fbdfd578"),
    "StudentName" : "John",
    "StudentAge" : 20
}

마무리


MongoDB에서 ID 목록으로 문서를 찾을 때는 $in 연산자가 핵심입니다. 특히 _id 필드가 ObjectId 타입이라는 점을 기억하고, 문자열 ID를 반드시 ObjectId로 변환한 뒤 쿼리에 사용해야 원하는 결과를 얻을 수 있습니다. 이 방식은 대량의 데이터에서 특정 문서들을 일괄 조회할 때 인덱스를 효율적으로 활용할 수 있어 성능 면에서도 매우 유리합니다.