MongoDB findOne()으로 단일 문서 조회하기
MongoDB에서 컬렉션(collection)으로부터 단일 문서(single document)를 반환하려면 findOne() 메서드를 사용합니다. 이 메서드는 조건에 일치하는 첫 번째 문서만을 반환한다는 점이 특징입니다.
먼저 실습을 위해 문서(document)가 포함된 컬렉션을 생성해 보겠습니다.
1단계: 샘플 컬렉션 생성
> db.demo463.insertOne({"StudentName":"Chris Brown","StudentAge":21,"StudentCountryName":"US"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f7ec8cb66ccba22cc9dcf")
}
> db.demo463.insertOne({"StudentName":"David Miller","StudentAge":23,"StudentCountryName":"UK"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f7ed5cb66ccba22cc9dd0")
}
> db.demo463.insertOne({"StudentName":"John Doe","StudentAge":22,"StudentCountryName":"AUS"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f7ee1cb66ccba22cc9dd1")
}
> db.demo463.insertOne({"StudentName":"John Smith","StudentAge":24,"StudentCountryName":"US"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7f7eefcb66ccba22cc9dd2")
}위 명령은 학생 이름(StudentName), 나이(StudentAge), 국가(StudentCountryName) 정보를 담은 네 개의 문서를 demo463 컬렉션에 순차적으로 삽입합니다.
2단계: find()로 전체 문서 확인
컬렉션에 저장된 모든 문서를 확인하려면 find() 메서드를 사용합니다.
> db.demo463.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e7f7ec8cb66ccba22cc9dcf"), "StudentName" : "Chris Brown",
"StudentAge" : 21, "StudentCountryName" : "US" }
{ "_id" : ObjectId("5e7f7ed5cb66ccba22cc9dd0"), "StudentName" : "David Miller",
"StudentAge" : 23, "StudentCountryName" : "UK" }
{ "_id" : ObjectId("5e7f7ee1cb66ccba22cc9dd1"), "StudentName" : "John Doe", "StudentAge" :
22, "StudentCountryName" : "AUS" }
{ "_id" : ObjectId("5e7f7eefcb66ccba22cc9dd2"), "StudentName" : "John Smith", "StudentAge"
: 24, "StudentCountryName" : "US" }3단계: findOne()으로 특정 문서 검색
이제 MongoDB 컬렉션에서 원하는 데이터를 검색하는 쿼리를 살펴보겠습니다. 아래 예제는 학생 이름이 "John Doe"인 문서 하나를 조회합니다.
> db.demo463.findOne({"StudentName":"John Doe"});실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5e7f7ee1cb66ccba22cc9dd1"),
"StudentName" : "John Doe",
"StudentAge" : 22,
"StudentCountryName" : "AUS"
}find()와 findOne()의 차이점
두 메서드의 핵심적인 차이는 다음과 같습니다.
- find(): 조건에 일치하는 모든 문서를 커서(cursor) 형태로 반환합니다.
- findOne(): 조건에 일치하는 문서 중 첫 번째 문서 하나만 반환합니다. 일치하는 문서가 없으면
null을 반환합니다.
따라서 특정 조건에 맞는 단일 레코드를 빠르게 확인할 때는 findOne()이 더 효율적이며, 전체 목록을 탐색할 때는 find()를 사용하는 것이 적합합니다.