MongoDB에서 ObjectId로 레코드 조회하기
MongoDB에서 각 문서는 자동으로 고유한 _id 필드를 가지며, 이 값은 ObjectId 형태로 저장됩니다. 이번 글에서는 ObjectId 값을 기준으로 특정 레코드(문서)를 조회하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성
먼저 insertOne() 메서드를 사용하여 문서가 담긴 컬렉션을 생성해 보겠습니다.
> db.findByObjectIdDemo.insertOne({"ClientName":"Larry","ClientAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd68cd657806ebf1256f11a")
}
> db.findByObjectIdDemo.insertOne({"ClientName":"Chris","ClientAge":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd68cdc57806ebf1256f11b")
}
> db.findByObjectIdDemo.insertOne({"ClientName":"David","ClientAge":38,"isMarried":true});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd68cf657806ebf1256f11c")
}위 명령을 실행하면 세 개의 문서가 findByObjectIdDemo 컬렉션에 저장되고, 각 문서마다 서로 다른 ObjectId가 자동으로 부여됩니다.
2. 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.findByObjectIdDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cd68cd657806ebf1256f11a"),
"ClientName" : "Larry",
"ClientAge" : 23
}
{
"_id" : ObjectId("5cd68cdc57806ebf1256f11b"),
"ClientName" : "Chris",
"ClientAge" : 26
}
{
"_id" : ObjectId("5cd68cf657806ebf1256f11c"),
"ClientName" : "David",
"ClientAge" : 38,
"isMarried" : true
}3. ObjectId로 특정 문서 조회하기
이제 핵심 단계입니다. _id 필드에 new ObjectId()를 지정하여 원하는 문서만 정확하게 조회할 수 있습니다.
> db.findByObjectIdDemo.find({_id: new ObjectId("5cd68cf657806ebf1256f11c")}).toArray(function(err, myDocument) { console.log(myDocument); });실행 결과는 다음과 같습니다.
[
{
"_id" : ObjectId("5cd68cf657806ebf1256f11c"),
"ClientName" : "David",
"ClientAge" : 38,
"isMarried" : true
}
]주요 포인트 정리
- ObjectId로 조회할 때는 반드시
new ObjectId("...")형태로 감싸야 합니다. 문자열 그대로 비교하면 일치하는 문서를 찾지 못합니다. find()는 조건에 맞는 모든 문서를 반환하며, 결과를 배열로 받고 싶다면toArray()를 함께 사용하면 됩니다.- 단일 문서만 조회할 경우에는
findOne({_id: new ObjectId("...")})메서드를 사용하는 것이 더 간결합니다.
이처럼 ObjectId를 활용하면 MongoDB에서 특정 레코드를 빠르고 정확하게 조회할 수 있습니다. _id 필드에는 기본 인덱스가 적용되어 있기 때문에 대용량 데이터에서도 매우 효율적인 검색이 가능합니다.