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

MongoDB에서 해시(객체) 배열을 검색하는 방법

MongoDB에서 배열 안에 포함된 해시(hash), 즉 내장 문서(embedded document)의 특정 필드 값을 기준으로 데이터를 검색하는 방법을 알아보겠습니다. 점 표기법(dot notation)을 사용하면 배열 내부의 객체 필드에 손쉽게 접근할 수 있습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 문서들이 담긴 컬렉션을 생성합니다. 각 문서는 TechnicalDetails라는 배열 필드를 가지며, 그 안에 Language 키를 포함한 객체가 들어 있습니다.

> db.searchAnArrayDemo.insertOne({_id:1,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.searchAnArrayDemo.insertOne({_id:2,"TechnicalDetails":[{"Language":"MySQL"}]});
{ "acknowledged" : true, "insertedId" : 2 }
> db.searchAnArrayDemo.insertOne({_id:3,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 3 }
> db.searchAnArrayDemo.insertOne({_id:4,"TechnicalDetails":[{"Language":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : 4 }
> db.searchAnArrayDemo.insertOne({_id:5,"TechnicalDetails":[{"Language":"Java"}]});
{ "acknowledged" : true, "insertedId" : 5 }

2. 저장된 전체 문서 확인하기

find() 메서드와 pretty()를 함께 사용하면 컬렉션의 모든 문서를 보기 좋게 출력할 수 있습니다.

> db.searchAnArrayDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : 1, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 2, "TechnicalDetails" : [ { "Language" : "MySQL" } ] }
{ "_id" : 3, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 4, "TechnicalDetails" : [ { "Language" : "MongoDB" } ] }
{ "_id" : 5, "TechnicalDetails" : [ { "Language" : "Java" } ] }

3. 해시 배열에서 특정 값 검색하기

배열 내부 객체의 필드를 검색하려면 '배열필드명.객체키' 형태의 점 표기법을 조건으로 사용합니다. 예를 들어 Language가 'MongoDB'인 문서를 찾고 그 개수를 세려면 아래와 같이 count() 메서드를 활용합니다.

> db.searchAnArrayDemo.find({'TechnicalDetails.Language':'MongoDB'}).count();

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

3

_id가 1, 3, 4인 세 개의 문서가 Language 값으로 'MongoDB'를 가지고 있으므로 결과로 3이 반환됩니다.

정리

MongoDB에서 해시(내장 문서) 배열을 검색할 때는 점 표기법('TechnicalDetails.Language')을 사용하면 됩니다. 이 방식은 배열 내 어떤 위치의 객체든 해당 키의 값을 자동으로 매칭해 주므로, 별도의 복잡한 연산자 없이 간단하게 원하는 문서를 조회할 수 있습니다.