MongoDB에서 find() 쿼리를 통해 배열 안의 값을 검색하려면 점 표기법(dot notation)을 사용하면 됩니다. 점 표기법은 배열 내부에 포함된 임베디드 문서(내장 문서)의 필드에 직접 접근할 수 있게 해주는 MongoDB의 강력한 기능입니다.
테스트용 컬렉션 생성하기
먼저 실습을 위해 문서가 포함된 컬렉션을 생성해 보겠습니다.
> db.demo38.insertOne({"ClientDetails":[{"ClientId":101,"ClientName":"Chris"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e176abccfb11e5c34d898d9")
}
> db.demo38.insertOne({"ClientDetails":[{"ClientId":102,"ClientName":"David"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e176ac7cfb11e5c34d898da")
}
> db.demo38.insertOne({"ClientDetails":[{"ClientId":103,"ClientName":"Mike"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e176ad0cfb11e5c34d898db")
}위 예제에서는 demo38 컬렉션에 세 개의 문서를 삽입했습니다. 각 문서는 ClientDetails라는 배열 필드를 가지고 있으며, 그 안에 ClientId와 ClientName 필드를 포함한 객체가 들어 있습니다.
컬렉션의 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo38.find();
이 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e176abccfb11e5c34d898d9"), "ClientDetails" : [ { "ClientId" : 101, "ClientName" : "Chris" } ] }
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }
{ "_id" : ObjectId("5e176ad0cfb11e5c34d898db"), "ClientDetails" : [ { "ClientId" : 103, "ClientName" : "Mike" } ] }점 표기법으로 배열 값 검색하기
이제 find() 쿼리에서 점 표기법을 활용해 배열 내부의 특정 값을 검색해 보겠습니다. 아래 쿼리는 ClientDetails 배열 안의 객체 중 ClientName이 "David"인 문서를 찾습니다.
> db.demo38.find({"ClientDetails.ClientName":"David"});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }핵심 포인트 정리
- 점 표기법:
"배열필드.내부필드"형태로 작성하여 배열 내 임베디드 문서의 필드를 조건으로 지정할 수 있습니다. - 자동 매칭: MongoDB는 배열 내 어떤 위치의 요소라도 조건과 일치하면 해당 문서를 반환합니다. 인덱스 번호를 명시할 필요가 없습니다.
- 확장성: 이 방식은 단일 요소뿐 아니라 여러 요소를 가진 배열에서도 동일하게 동작하므로, 복잡한 데이터 구조를 다룰 때 매우 유용합니다.
이처럼 점 표기법만 익히면 MongoDB에서 배열 형태로 저장된 데이터도 손쉽게 검색할 수 있습니다. 실무에서 고객 정보, 주문 상세 등 중첩된 구조의 데이터를 다룰 때 자주 활용되는 패턴이니 꼭 기억해 두세요.