MongoDB에서 배열 필드의 첫 번째 요소(인덱스 0)와 일치하는 문서를 검색하려면 점 표기법(dot notation)을 활용하면 됩니다. 배열 요소에 인덱스를 명시적으로 지정하면 해당 위치의 값만 기준으로 조건을 걸 수 있습니다.
1. 샘플 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용하여 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
> db.matchingFirstItemInTheArrayDemo.insertOne(
{
"ClientDetails": [
{
"ClientName": "Larry",
"ClientAge": 28
}
]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7a5d26d78f205348bc636")
}
> db.matchingFirstItemInTheArrayDemo.insertOne(
{
"ClientDetails": [
{
"ClientName": "Chris",
"ClientAge": 56
}
]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7a5f56d78f205348bc637")
}
> db.matchingFirstItemInTheArrayDemo.insertOne(
{
"ClientDetails": [
{
"ClientName": "Robert",
"ClientAge": 46
}
]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7a6076d78f205348bc638")
}2. 저장된 전체 문서 확인하기
find() 메서드와 pretty() 메서드를 함께 사용하면 컬렉션에 저장된 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.matchingFirstItemInTheArrayDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd7a5d26d78f205348bc636"),
"ClientDetails" : [
{
"ClientName" : "Larry",
"ClientAge" : 28
}
]
}
{
"_id" : ObjectId("5cd7a5f56d78f205348bc637"),
"ClientDetails" : [
{
"ClientName" : "Chris",
"ClientAge" : 56
}
]
}
{
"_id" : ObjectId("5cd7a6076d78f205348bc638"),
"ClientDetails" : [
{
"ClientName" : "Robert",
"ClientAge" : 46
}
]
}3. 배열의 첫 번째 항목과 일치하는 문서 검색하기
핵심은 "필드명.0.하위필드명" 형태로 조건을 작성하는 것입니다. 여기서 .0은 배열의 첫 번째 요소(0번 인덱스)를 의미합니다.
> db.matchingFirstItemInTheArrayDemo.find({"ClientDetails.0.ClientName":"Chris"});위 쿼리는 ClientDetails 배열의 첫 번째 요소의 ClientName 값이 "Chris"인 문서만 반환합니다. 실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5cd7a5f56d78f205348bc637"),
"ClientDetails" : [ { "ClientName" : "Chris", "ClientAge" : 56 } ]
}정리
MongoDB에서 배열 내 특정 위치의 값을 조회할 때는 점 표기법 + 인덱스(예: ClientDetails.0.ClientName)를 사용합니다. 이 방식은 배열의 어느 위치든 상관없이 값이 일치하는지 확인하는 일반적인 배열 검색("ClientDetails.ClientName": "Chris")과 달리, 정확히 그 위치의 값만 기준으로 매칭한다는 점이 핵심 차이입니다. 따라서 만약 "Chris"가 두 번째 요소에 있다면 위 쿼리는 해당 문서를 반환하지 않습니다.