MongoDB에서 반환 형식 지정하기MongoDB에서는 $addToSet 연산자를 활용하면 여러 문서에 흩어져 있는 값을 하나의 배열로 묶어 원하는 반환 형식으로 결과를 얻을 수 있습니다. 이번 글에서는 실제 예제를 통해 그 사용법을 단계별로 살펴보겠습니다.1. 컬렉션 생성 및 문서 삽입먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입합니다.> db.demo207.insertOne({FavouriteTechnology:Spring Boot}); { acknowledged : true, insertedId : Objec
MongoDB에서 문자열로 저장된 숫자 데이터를 실제 숫자 타입으로 변환해야 하는 경우가 종종 있습니다. 예를 들어, 데이터 마이그레이션 과정이나 외부 시스템에서 가져온 데이터가 문자열 형태로 저장되어 있을 때 이를 parseInt() 함수를 활용해 손쉽게 변환할 수 있습니다.테스트용 컬렉션 생성먼저 변환 작업을 테스트하기 위해 샘플 문서들이 담긴 컬렉션을 생성하겠습니다. 아래 예시에서는 value 필드에 숫자가 아닌 문자열 형태로 값이 저장되어 있습니다.> db.demo208.insertOne( { value:50} ); {
MongoDB에서 필드 값을 변환하여 날짜의 일(day)을 생성하려면 aggregate() 메서드를 사용하면 됩니다. 이 글에서는 배열 형태로 저장된 타임스탬프 값을 프로젝션 단계에서 날짜로 변환하고, 그중 일 값만 추출하는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성먼저 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 details 배열 안에 유닉스 타임스탬프(dat)와 이름(Name)이 함께 저장되어 있습니다.> db.demo209.insertOne( ... { ... _id : 101, ...
MongoDB에서 배열 필드 안에 포함된 특정 값이 몇 번 등장하는지 확인하고 싶다면 aggregate() 메서드를 사용하는 것이 가장 효과적입니다. 이 글에서는 실제 예제를 통해 컬렉션을 생성하고, 집계 파이프라인을 구성하여 특정 값의 개수를 세는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 클라이언트 이름 정보를 담고 있는 문서를 하나 삽입해 보겠습니다. 아래 예제에서는 details라는 배열 필드에 여러 개의 고객명이 중복되어 들어가 있습니다.> db.demo210.insertOne( ... { ...
MongoDB에서 값의 타입을 테스트하려면 $type 연산자를 활용할 수 있습니다. 이 글에서는 $type 연산자와 자바스크립트의 삼항 비교 결과를 조합하여, 두 개의 외부 변수 값이 서로 같은지 확인하는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용하여 두 개의 문서를 삽입합니다.> db.demo211.insertOne({id:101,Name:Chris}); { acknowledged : true, insertedId :
MongoDB에서 특정 단어가 포함된 문서를 찾으려면 find() 메서드를 사용하고, 검색어를 정규식 형태인 /word/i처럼 지정하면 됩니다. 여기서 끝에 붙는 i 플래그는 대소문자를 구분하지 않고 검색하겠다는 의미입니다.샘플 컬렉션 생성하기먼저 예제로 사용할 문서들이 담긴 컬렉션을 생성해 보겠습니다.> db.demo212.insertOne({details:[{Name:John Doe}]}); { acknowledged : true, insertedId : ObjectId(5e3e2c7603d395bdc21346f
MongoDB에서 다른 배열 내부에 중첩된 배열로부터 특정 레코드를 삭제하려면 $pull 연산자를 사용해야 합니다. 이미 생성된 컬렉션을 수정하는 작업이므로 update() 메서드와 함께 사용합니다.1. 샘플 컬렉션 생성하기먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo213.insertOne({... id: 101,... details1: [... {... Name: Chris,... details2: [... {... StudentName:
MongoDB에서 중첩된 문서의 하위 필드(subfield)를 쿼리 결과의 최상위 레벨로 끌어올리고 싶을 때가 있습니다. 이때 모든 키 이름을 하나하나 나열하지 않고 처리하려면 애그리게이션 파이프라인의 $objectToArray와 $arrayToObject 연산자를 활용하면 됩니다.테스트용 컬렉션 생성먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.promoteSubfieldsDemo.insertOne({s:10,y:{t:20,u:30}}); { acknowledged : true, inse
MongoDB에서 map() 함수로 특정 값 목록 추출하기MongoDB 쿼리 결과에서 특정 필드의 값들만 모아 목록 형태로 반환하고 싶다면 map() 함수를 활용하면 됩니다. map()은 커서(cursor)에 적용하여 각 문서를 원하는 형태로 변환한 결과를 배열로 돌려주는 메서드입니다.먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo195.insertOne({Subject:MySQL}); { acknowledged : true, insertedId : ObjectId(5e3af3f203d
MongoDB에서 배열 안에 포함된 하위 문서를 다룰 때, 특정 키의 값이 주어진 값과 일치하는 요소만 찾아 그 위치에 있는 다른 키의 값을 수정해야 하는 경우가 자주 있습니다. 이럴 때는 쿼리 조건에 $elemMatch 연산자를 사용하고, 업데이트 시에는 위치 연산자 $를 활용하면 간단하게 해결할 수 있습니다.1. 샘플 컬렉션 생성하기먼저 실습에 사용할 문서를 담은 컬렉션을 생성해 보겠습니다.> db.demo196.insertOne( ... { ... Id : 101, ... details : [ ...
결론부터 말씀드리면, limit()는 쿼리 실행 속도를 높여주지 않습니다. 대신 서버에서 클라이언트로 전송되는 데이터 양을 줄여 네트워크 대역폭 소비를 감소시키는 효과가 있습니다. 즉, limit()는 성능 최적화라기보다 불필요한 데이터 전송을 막는 도구라고 이해하는 것이 정확합니다.그럼 실제 예제를 통해 limit()의 동작 방식을 살펴보겠습니다. 먼저 문서들을 포함하는 컬렉션을 생성합니다.> db.demo197.insertOne({Name:Chris}); { acknowledged : true, &n
MongoDB에서 배열 요소를 조건에 따라 제거하고 싶다면 $pull 연산자와 update 메서드를 함께 사용하면 됩니다. 이 글에서는 특정 값보다 작은 요소를 여러 문서에서 한 번에 제거하는 방법을 예제와 함께 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 데모용 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo198.insertOne({List:{Values:[10,20,30,30,70,80,90]}}); { acknowledged : true, insertedId : ObjectId(5e3c224503d
MongoDB에서 집계(Aggregation) 작업을 수행하려면 aggregate() 메서드를 사용합니다. 이 글에서는 여러 단계로 깊이 중첩된 문서 안의 특정 필드 값들을 합산하는 방법을 단계별로 살펴보겠습니다. 1. 샘플 컬렉션 및 문서 생성 먼저 insertOne() 메서드를 사용하여 중첩 구조를 가진 문서 두 개를 컬렉션에 삽입합니다. > db.demo199.insertOne( ... { ... "details1":{ ... &n
MongoDB에서 하나의 문서 안에 포함된 여러 하위 문서(배열 요소)를 동시에 필터링해야 하는 경우가 있습니다. 이럴 때는 aggregate() 메서드와 애그리게이션 파이프라인($match, $unwind, $group, $project)을 활용하면 효과적입니다.이 글에서는 실제 예제를 통해 두 개의 하위 문서 배열을 각각 조건에 맞게 필터링하는 과정을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 insertOne() 메서드로 테스트용 문서를 생성합니다.> db.demo200.insertOne( ... { ...
MongoDB에서 문서의 특정 값만 업데이트하려면 update() 메서드를 사용하고, 변경할 새 값은 $set 연산자로 지정하면 됩니다. 이 글에서는 실제 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.1. 컬렉션 생성 및 문서 삽입먼저 insertOne() 메서드를 사용해 demo201 컬렉션에 세 개의 클라이언트 문서를 생성합니다.> db.demo201.insertOne({ClientName:Chris Brown,ClientAge:26});{ acknowledged : true, &
MongoDB에서 쿼리 성능을 분석하거나 최적화할 때는 explain() 메서드를 활용하여 쿼리 실행 계획(query plan)을 확인할 수 있습니다. explain()은 해당 쿼리가 어떤 방식으로 실행되는지, 인덱스를 사용하는지 아니면 전체 컬렉션을 스캔하는지 등의 상세 정보를 보여줍니다.1. 샘플 컬렉션 생성먼저 문서를 포함한 컬렉션을 생성해 보겠습니다. db.demo202.insertOne({StudentFirstName:Bob,StudentAge:22}); { acknowledged : true, insertedI
MongoDB에서 중첩된 배열(nested array) 안에서 두 개 이상의 조건을 동시에 만족하는 요소를 찾으려면 $elemMatch 연산자를 사용해야 합니다. 일반적인 점 표기법(dot notation) 방식과 달리, $elemMatch는 배열 내 동일한 하나의 요소가 모든 조건을 충족하는지를 정확하게 판별할 수 있어서 데이터 정합성이 중요한 조회 작업에 필수적입니다.1. 샘플 컬렉션 생성먼저 실습용으로 문서를 포함하는 컬렉션을 생성하겠습니다. insertOne() 메서드를 사용합니다.> db.demo203.insertOn
MongoDB에서 배열에 포함된 특정 요소만 조회하고 싶다면 aggregate() 메서드를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 배열 안에서 원하는 요소만 골라내는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 문서를 담은 컬렉션을 생성합니다. 아래 예제에서는 직원 정보를 details 배열로 저장하는 문서를 만들어 보겠습니다.> db.demo204.insertOne( ... { ... _id : 101, ... Name : Chris, ... Age : 23, ...
MongoDB에서 필드의 존재 여부를 조건으로 레코드를 조회하려면 $or 연산자와 함께 $exists 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 두 연산자를 조합하여 원하는 문서만 효율적으로 가져오는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 데모용 컬렉션을 만들고 문서를 삽입합니다. 아래 예제에서는 세 개의 문서를 추가하며, 그중 일부 문서에는 Subjects 필드가 있고 일부에는 없습니다.> db.demo185.insertOne({_id:101, details:{Name:Chris, Scor
MongoDB 대소문자 구분 없이 검색하기데이터베이스 작업을 하다 보면 저장된 값의 대소문자와 관계없이 특정 데이터를 조회해야 하는 경우가 자주 발생합니다. 예를 들어 이메일 주소가 JOHN@GMAIL.COM으로 저장되어 있어도 사용자가 john@gmail.com으로 검색하면 결과를 찾아야 하죠. MongoDB에서는 정규 표현식(regular expression)에 i 옵션을 활용하면 이러한 대소문자를 구분하지 않는(case-insensitive) 검색을 손쉽게 구현할 수 있습니다.이번 글에서는 실제 예제를 통해 컬렉션 생성부터 대