Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 도트(.) 표기법으로 하위 문서의 특정 항목 조회하기

MongoDB에서 하위 문서(subdocument) 내부의 특정 항목을 찾으려면 도트(.) 표기법을 사용하면 됩니다. 이 방법은 배열 형태로 저장된 하위 문서의 필드에 접근할 때 특히 유용합니다.

1. 샘플 컬렉션 생성하기

먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo81.insertOne({"StudentDetails":[{"StudentName":"Carol","StudentSubject":"Java"},{"StudentName":"David","StudentSubject":"MongoDB"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2bf6ec71bf0181ecc4229d")
}
> db.demo81.insertOne({"StudentDetails":[{"StudentName":"Mike","StudentSubject":"Python"},{"StudentName":"David","StudentSubject":"C"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2bf70471bf0181ecc4229e")
}
> db.demo81.insertOne({"StudentDetails":[{"StudentName":"Jace","StudentSubject":"C++"},{"StudentName":"John","StudentSubject":"MySQL"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2bf72071bf0181ecc4229f")
}

각 문서는 StudentDetails라는 배열 안에 학생 이름과 과목 정보를 담은 하위 문서 두 개를 포함하고 있습니다.

2. 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo81.find();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e2bf6ec71bf0181ecc4229d"), "StudentDetails" : [
      { "StudentName" : "Carol", "StudentSubject" : "Java" },
      { "StudentName" : "David", "StudentSubject" : "MongoDB" }
   ]
}
{
   "_id" : ObjectId("5e2bf70471bf0181ecc4229e"), "StudentDetails" : [
      { "StudentName" : "Mike", "StudentSubject" : "Python" },
      { "StudentName" : "David", "StudentSubject" : "C" }
   ]
}
{
   "_id" : ObjectId("5e2bf72071bf0181ecc4229f"), "StudentDetails" : [
      { "StudentName" : "Jace", "StudentSubject" : "C++" },
      { "StudentName" : "John", "StudentSubject" : "MySQL" }
   ]
}

3. 도트 표기법으로 하위 문서 항목 검색하기

이제 하위 문서에서 특정 항목을 찾는 쿼리를 살펴보겠습니다. 부모 필드명과 하위 문서의 필드명을 마침표(.)로 연결하여 조건을 지정합니다.

> db.demo81.find({"StudentDetails.StudentSubject":"MongoDB"});

이 쿼리는 StudentSubject 값이 "MongoDB"인 하위 문서를 포함한 문서를 반환합니다. 실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e2bf6ec71bf0181ecc4229d"), "StudentDetails" : [ { "StudentName" : "Carol", "StudentSubject" : "Java" }, { "StudentName" : "David", "StudentSubject" : "MongoDB" } ] }

핵심 정리

  • 하위 문서(배열 요소 포함)의 필드에 접근할 때는 부모필드.자식필드 형태의 도트 표기법을 사용합니다.
  • 조건과 일치하는 하위 문서가 하나라도 있으면 해당 문서 전체가 결과로 반환됩니다.
  • 배열 내 여러 하위 문서 중 일치하는 요소만 골라내고 싶다면 $elemMatch 연산자나 프로젝션(projection)을 함께 활용할 수 있습니다.