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

MongoDB에서 배열(목록) 내 값 조회하기 – 위치 연산자($) 활용법

MongoDB에서 배열 내 값(객체가 아닌) 조회하기

MongoDB에서 배열(목록)에 저장된 값 중 조건과 일치하는 요소만 조회하고 싶다면 위치 연산자($)를 활용하면 됩니다. 이번 글에서는 실제 예제를 통해 배열 안의 단순 값(문자열 등 객체가 아닌 데이터)을 조회하는 방법을 살펴보겠습니다.

1. 테스트용 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 문서를 담은 컬렉션을 생성합니다. 각 문서는 id 필드와 이름 문자열로 구성된 Name 배열을 가지고 있습니다.

> db.demo628.insertOne({id:1,Name:["Chris","David","John"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9ae7ea6c954c74be91e6b6")
}
> db.demo628.insertOne({id:1,Name:["Carol","Sam"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9ae7f26c954c74be91e6b7")
}
> db.demo628.insertOne({id:2,Name:["Mike","Sam","John"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e9ae8056c954c74be91e6b8")
}

2. 전체 문서 확인하기

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

> db.demo628.find();

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

{ "_id" : ObjectId("5e9ae7ea6c954c74be91e6b6"), "id" : 1, "Name" : [ "Chris", "David", "John" ] }
{ "_id" : ObjectId("5e9ae7f26c954c74be91e6b7"), "id" : 1, "Name" : [ "Carol", "Sam" ] }
{ "_id" : ObjectId("5e9ae8056c954c74be91e6b8"), "id" : 2, "Name" : [ "Mike", "Sam", "John" ] }

3. 위치 연산자($)로 배열 내 값 조회하기

이제 배열 안의 값(객체가 아닌 단순 값)을 조회해 보겠습니다. 프로젝션(projection) 부분에 "Name.$":1처럼 위치 연산자를 지정하면, 쿼리 조건과 일치하는 배열 요소만 반환됩니다.

> db.demo628.find({"Name":"John"}, {"id":1, "Name.$":1});

실행 결과는 다음과 같습니다. Name 배열에 "John"이 포함된 두 개의 문서가 반환되며, 배열에는 일치한 요소인 "John"만 표시되는 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e9ae7ea6c954c74be91e6b6"), "id" : 1, "Name" : [ "John" ] }
{ "_id" : ObjectId("5e9ae8056c954c74be91e6b8"), "id" : 2, "Name" : [ "John" ] }

정리

이처럼 MongoDB에서는 위치 연산자($)를 프로젝션에 함께 사용하면, 배열 전체가 아닌 쿼리 조건과 일치하는 특정 요소만 깔끔하게 추출할 수 있습니다. 배열 필드에서 원하는 값만 골라내야 하는 경우 유용하게 활용해 보세요.