MongoDB에서 _id로 레코드 찾기
MongoDB에서 _id 필드를 기준으로 특정 레코드(문서)를 조회하려면 find() 메서드와 함께 ObjectId() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
db.yourCollectionName.find({"_id":yourObjectId});1. 예제용 컬렉션 생성
먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다. insertOne() 메서드를 호출하면 각 문서마다 고유한 ObjectId가 자동으로 생성되어 저장됩니다.
> db.findRecordByIdDemo.insertOne({"CustomerName":"Larry","CustomerAge":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9dc2c875e2eeda1d5c3671")
}
> db.findRecordByIdDemo.insertOne({"CustomerName":"Bob","CustomerAge":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9dc2d175e2eeda1d5c3672")
}
> db.findRecordByIdDemo.insertOne({"CustomerName":"Carol","CustomerAge":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9dc2d775e2eeda1d5c3673")
}
> db.findRecordByIdDemo.insertOne({"CustomerName":"David","CustomerAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9dc2e375e2eeda1d5c3674")
}2. 전체 문서 확인하기
find() 메서드와 pretty()를 함께 사용하면 컬렉션에 저장된 모든 문서를 가독성 있게 출력할 수 있습니다.
> db.findRecordByIdDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5c9dc2c875e2eeda1d5c3671"),
"CustomerName" : "Larry",
"CustomerAge" : 26
}
{
"_id" : ObjectId("5c9dc2d175e2eeda1d5c3672"),
"CustomerName" : "Bob",
"CustomerAge" : 20
}
{
"_id" : ObjectId("5c9dc2d775e2eeda1d5c3673"),
"CustomerName" : "Carol",
"CustomerAge" : 22
}
{
"_id" : ObjectId("5c9dc2e375e2eeda1d5c3674"),
"CustomerName" : "David",
"CustomerAge" : 24
}3. _id로 특정 레코드 조회하기
이제 ObjectId() 함수 안에 원하는 _id 문자열을 넣어 특정 레코드만 조회해 보겠습니다.
> db.findRecordByIdDemo.find({"_id":ObjectId("5c9dc2d175e2eeda1d5c3672")}).pretty();실행 결과, 조건에 일치하는 문서 하나(Bob의 정보)만 정확히 반환됩니다.
{
"_id" : ObjectId("5c9dc2d175e2eeda1d5c3672"),
"CustomerName" : "Bob",
"CustomerAge" : 20
}주의 사항
ObjectId로 문서를 조회할 때 반드시 ObjectId() 헬퍼 함수로 감싸야 합니다. 문자열 그대로 전달하면 데이터 타입이 일치하지 않아 아무 결과도 반환되지 않으니 유의하세요.