네, MongoDB에서 _id 값을 기준으로 여러 문서를 한 번에 조회할 수 있습니다. 이때 사용하는 것이 바로 $in 연산자입니다. $in 연산자는 배열 형태로 여러 개의 ID 값을 전달받아, 해당 목록에 포함된 모든 문서를 반환합니다.
기본 구문
db.yourCollectionName.find({_id:{$in:[yourValue1,yourValue2,yourValue3,...N]}});배열 안에 원하는 만큼의 ID 값을 나열하면 되며, MongoDB는 해당 조건과 일치하는 문서만 효율적으로 찾아줍니다.
예제 준비: 샘플 컬렉션 생성
먼저 실습용 컬렉션에 문서를 삽입해 보겠습니다.
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":10,"CustomerName":"John"});
{ "acknowledged" : true, "insertedId" : 10 }
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":14,"CustomerName":"Chris"});
{ "acknowledged" : true, "insertedId" : 14 }
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":20,"CustomerName":"Robert"});
{ "acknowledged" : true, "insertedId" : 20 }
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":25,"CustomerName":"Sam"});
{ "acknowledged" : true, "insertedId" : 25 }
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":30,"CustomerName":"Bob"});
{ "acknowledged" : true, "insertedId" : 30 }
> db.retrieveMultipleDocsByIdDemo.insertOne({"_id":34,"CustomerName":"Carol"});
{ "acknowledged" : true, "insertedId" : 34 }전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.retrieveMultipleDocsByIdDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : 10, "CustomerName" : "John" }
{ "_id" : 14, "CustomerName" : "Chris" }
{ "_id" : 20, "CustomerName" : "Robert" }
{ "_id" : 25, "CustomerName" : "Sam" }
{ "_id" : 30, "CustomerName" : "Bob" }
{ "_id" : 34, "CustomerName" : "Carol" }$in 연산자로 여러 문서 조회하기
이제 $in 연산자를 사용하여 ID가 10, 20, 30인 세 개의 문서를 동시에 조회해 보겠습니다.
> db.retrieveMultipleDocsByIdDemo.find({_id:{$in:[10,20,30]}});실행 결과는 다음과 같습니다.
{ "_id" : 10, "CustomerName" : "John" }
{ "_id" : 20, "CustomerName" : "Robert" }
{ "_id" : 30, "CustomerName" : "Bob" }참고 사항
기본적으로 생성되는 ObjectId 타입의 _id 필드를 조회할 때는 문자열이 아닌 ObjectId 객체로 감싸서 전달해야 합니다. 예를 들어 다음과 같이 작성합니다.
db.collection.find({_id:{$in:[ObjectId("..."), ObjectId("...")]}});또한 $in 배열에 존재하지 않는 ID가 포함되어도 오류가 발생하지 않으며, 일치하는 문서만 결과로 반환됩니다. 이 방식은 여러 번의 find() 호출을 반복하는 것보다 성능 면에서도 훨씬 유리합니다.