JSON 형태의 데이터에서 특정 값을 조회하려면 find() 메서드와 점(.) 표기법(dot notation)을 함께 사용하면 됩니다. 먼저 샘플 문서를 담은 컬렉션을 생성해 보겠습니다.
> db.findValueFromJsonDemo.insertOne(
{
"UserDetails": [{
"_id": new ObjectId(),
"UserName": "Carol",
"UserMessage": "Hi"
}],
"UserFriendsName": ["John","Sam"]
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdf8a4cbf3115999ed511fd")
}컬렉션의 전체 문서 확인하기
생성된 컬렉션에 저장된 모든 문서를 확인하려면 find() 메서드를 사용합니다. 가독성을 높이기 위해 pretty()를 함께 호출하는 것이 좋습니다.
> db.findValueFromJsonDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fd"),
"UserDetails" : [
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fc"),
"UserName" : "Carol",
"UserMessage" : "Hi"
}
],
"UserFriendsName" : [
"John",
"Sam"
]
}점 표기법으로 중첩된 값 조회하기
이제 JSON 데이터 안에 중첩된 필드의 값을 찾아보겠습니다. 배열 내부 객체의 필드에 접근할 때는 부모필드.자식필드 형태의 점 표기법을 조건으로 지정합니다.
> db.findValueFromJsonDemo.find({'UserDetails.UserMessage': "Hi"});실행 결과는 다음과 같습니다. UserDetails 배열 안의 UserMessage 값이 "Hi"인 문서가 정상적으로 반환된 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fd"),
"UserDetails" : [
{
"_id" : ObjectId("5cdf8a4cbf3115999ed511fc"), "UserName" : "Carol", "UserMessage" : "Hi"
}
],
"UserFriendsName" : [
"John", "Sam"
]
}정리
MongoDB에서 중첩된 JSON 구조의 값을 검색할 때는 find() 메서드에 점 표기법을 활용한 조건을 전달하면 됩니다. 이 방식은 배열 내부의 객체 필드뿐만 아니라 여러 단계로 중첩된 문서 구조에서도 동일하게 적용할 수 있어, 복잡한 데이터 구조를 다룰 때 매우 유용합니다.