MongoDB에서 특정 데이터나 값을 조회해야 할 때는 findOne() 메서드를 사용하면 됩니다. findOne()은 컬렉션에서 지정한 쿼리 조건을 만족하는 단 하나의 문서(document)만 반환하는 메서드입니다.
1. 테스트용 컬렉션 생성하기
먼저 실습에 사용할 컬렉션과 문서를 생성해 보겠습니다.
> db.demo473.insertOne(
... {
... "_id" : new ObjectId(),
... "Name" : "Chris",
... "details" : {
... "X-Coordinate" :10,
... "Y-Coordinate" :15
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e805a07b0f3fa88e227907d")
}
> db.demo473.insertOne(
... {
... "_id" : new ObjectId(),
... "Name" : "Bob",
... "details" : {
... "X-Coordinate" :11,
... "Y-Coordinate" :12
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e805a07b0f3fa88e227907e")
}위 코드는 'Chris'와 'Bob'이라는 이름을 가진 두 개의 문서를 demo473 컬렉션에 삽입합니다. 각 문서에는 X좌표와 Y좌표 정보가 details 필드에 중첩되어 저장되어 있습니다.
2. find() 메서드로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo473.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e805a07b0f3fa88e227907d"), "Name" : "Chris", "details" : { "X-Coordinate" : 10, "Y-Coordinate" : 15 } }
{ "_id" : ObjectId("5e805a07b0f3fa88e227907e"), "Name" : "Bob", "details" : { "X-Coordinate" : 11, "Y-Coordinate" : 12 } }3. findOne()으로 특정 데이터 조회하기
이제 findOne() 메서드를 사용하여 특정 조건에 맞는 데이터를 반환하는 쿼리를 살펴보겠습니다. 여기서는 X좌표가 11인 문서를 조회해 보겠습니다.
> db.demo473.findOne({ 'details.X-Coordinate':11 })실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5e805a07b0f3fa88e227907e"),
"Name" : "Bob",
"details" : {
"X-Coordinate" : 11,
"Y-Coordinate" : 12
}
}findOne()과 find()의 차이점
두 메서드의 핵심적인 차이는 다음과 같습니다.
- find(): 조건에 일치하는 모든 문서를 커서(cursor) 형태로 반환합니다.
- findOne(): 조건에 일치하는 첫 번째 문서 하나만 반환하며, 일치하는 문서가 없으면 null을 반환합니다.
따라서 단일 문서만 필요한 경우 findOne()을 사용하면 코드가 더 간결해지고 불필요한 커서 처리를 피할 수 있습니다. 특히 내부 필드(예: details.X-Coordinate)를 기준으로 조회할 때는 위 예제처럼 점 표기법(dot notation)을 활용하면 됩니다.