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

MongoDB에서 중첩된 문자열 배열을 조회하는 쿼리 방법

MongoDB에서 중첩된(nested) 문자열 배열을 조회하려면 find() 메서드 안에서 점 표기법(dot notation)을 사용하면 됩니다. 이 방식은 문서 내부에 포함된 하위 필드나 배열 요소에 직접 접근할 수 있게 해주는 MongoDB의 핵심 기능 중 하나입니다.

실제 예제를 통해 확인해 보겠습니다. 먼저 컬렉션을 생성하고 문서를 삽입합니다.

> db.demo89.insertOne(
... { id: 101, Details: [ { Name: "Chris", Marks: 45 }, { Name: "David", Marks: 55, Subjects : ["MySQL", "MongoDB", "Java", "C"] } ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2c163b79799acab037af51")
}
> db.demo89.insertOne(
... { id: 102, Details: [ { Name: "Mike", Marks: 48 }, { Name: "Bob", Marks: 98, Subjects : ["C++", "MySQL"] } ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2c163c79799acab037af52")
}

컬렉션의 전체 문서 확인하기

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 출력할 수 있습니다.

> db.demo89.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e2c163b79799acab037af51"), "id" : 101, "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "David", "Marks" : 55, "Subjects" : [ "MySQL", "MongoDB", "Java", "C" ] } ] }
{ "_id" : ObjectId("5e2c163c79799acab037af52"), "id" : 102, "Details" : [ { "Name" : "Mike", "Marks" : 48 }, { "Name" : "Bob", "Marks" : 98, "Subjects" : [ "C++", "MySQL" ] } ] }

점 표기법으로 중첩된 배열 값 조회하기

이제 Details.Subjects처럼 부모 필드와 하위 필드를 점(.)으로 연결하여 조건을 지정하면, 중첩된 배열 내부의 특정 문자열이 포함된 문서만 조회할 수 있습니다.

> db.demo89.find({ "Details.Subjects": "MongoDB"});

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

{ "_id" : ObjectId("5e2c163b79799acab037af51"), "id" : 101, "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "David", "Marks" : 55, "Subjects" : [ "MySQL", "MongoDB", "Java", "C" ] } ] }

결과를 보면 Subjects 배열 안에 "MongoDB"라는 문자열을 가진 문서(id: 101)만 반환된 것을 확인할 수 있습니다. 반면 두 번째 문서(id: 102)는 Subjects 배열에 해당 값이 없으므로 결과에서 제외되었습니다.

핵심 정리

중첩된 배열이나 객체 내부의 값을 조회할 때는 경로를 점으로 구분하여 지정하면 됩니다. MongoDB는 자동으로 배열 내부의 각 요소를 검사하기 때문에 별도의 추가 처리 없이 원하는 문서를 손쉽게 찾아낼 수 있습니다.