MongoDB에서 여러 문서가 특정 필드 값들을 모두 포함하고 있는지, 즉 문서들의 교집합(intersection)을 집합적으로 매칭해야 하는 경우가 있습니다. 이럴 때는 aggregate() 메서드와 $match, $group, $all, $elemMatch 연산자를 조합하면 효과적으로 해결할 수 있습니다.1. 샘플 컬렉션 생성하기먼저 예제로 사용할 컬렉션에 문서를 삽입해 보겠습니다.> db.demo393.insertOne( ... { ... Id1: 1, ... Name: Chris, ...
개요MongoDB에서는 $expr, $let, $arrayElemAt 같은 집계 표현식을 활용하면 배열 안에 포함된 하위 문서(서브도큐먼트)의 특정 필드 값을 조건으로 삼아 상위 문서를 조회할 수 있습니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1단계: 컬렉션 생성 및 문서 삽입먼저 하위 문서 배열을 포함한 컬렉션을 생성하고 문서를 삽입해 보겠습니다.> db.demo394.insertOne(... {... &
MongoDB에서 한 컬렉션에 저장된 ObjectId 배열을 기준으로 다른 컬렉션의 문서를 가져오려면 $lookup을 사용하면 됩니다. $lookup은 동일한 데이터베이스 내의 샤딩되지 않은(unsharded) 컬렉션에 대해 왼쪽 외부 조인(left outer join)을 수행하며, 조인된 컬렉션의 문서를 필터링하여 처리할 수 있습니다.특히 배열 형태로 저장된 ObjectId 목록을 조인 키로 활용하려면 일반적인 localField/foreignField 방식 대신 let, pipeline, 그리고 $expr과 함께 $in 연산자를
MongoDB에서 여러 개의 쓰기(write) 작업을 한 번에 처리하려면 bulkWrite() 메서드를 사용하는 것이 가장 효율적입니다. 이 메서드는 삽입, 수정, 삭제 등 다양한 작업을 하나의 요청으로 묶어 실행할 수 있어 성능 면에서 큰 이점을 제공합니다.1. 배열 데이터 준비하기먼저 컬렉션에 추가할 값들을 담은 배열 리스트를 생성합니다. 아래 예제에서는 두 개의 사용자 정보(John, Bob)를 배열로 정의했습니다.> const arrayList = [ ... {Value1:100, Value2:200, Name:
웹 페이지에서 여러 콘텐츠 섹션을 하나의 화면 안에서 전환하며 보여주고 싶다면 전체 페이지 탭(Full-page Tabs) 기능이 유용합니다. 이 글에서는 CSS와 JavaScript만을 사용하여 화면 전체를 채우는 탭 인터페이스를 구현하는 방법을 단계별로 살펴보겠습니다.전체 페이지 탭의 동작 원리전체 페이지 탭은 크게 두 부분으로 구성됩니다.탭 버튼(tablink): 상단에 배치되어 각 콘텐츠 페이지로 이동할 수 있는 버튼탭 콘텐츠(tabcontent): 버튼을 클릭했을 때 화면 전체에 표시되는 실제 내용 영역JavaScript가
MongoDB 인덱스 재구축이란?MongoDB에서 컬렉션의 기존 인덱스를 다시 생성해야 할 때는 reIndex() 메서드를 사용합니다. 이 메서드는 해당 컬렉션의 모든 인덱스를 삭제한 뒤 처음부터 새로 구축하므로, 인덱스가 손상되었거나 최적화가 필요한 경우에 유용합니다.먼저 실습을 위해 데모 컬렉션에 인덱스를 하나 생성해 보겠습니다.1단계: 인덱스 생성하기다음 쿼리는 StudentFirstName 필드에 오름차순 인덱스를 생성합니다.> db.demo42.createIndex({StudentFirstName:1});위 쿼리를 실
MongoDB 쿼리 결과를 임시 데이터베이스에 저장하기MongoDB에서 쿼리 실행 결과를 별도의 임시 컬렉션에 저장해야 하는 경우가 종종 있습니다. 이럴 때 forEach() 메서드를 활용하면 단일 쿼리만으로 조회 결과를 다른 컬렉션에 손쉽게 복사할 수 있습니다.먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.> db.demo43.insertOne({StudentName:Chris}); { acknowledged : true, insertedId : ObjectId(5e25d4b3cfb11e5c34d8
MongoDB에 저장된 객체를 얻는 방법MongoDB에서는 자바스크립트 변수에 담긴 문서(document)를 그대로 컬렉션에 저장할 수 있으며, 저장된 객체는 find() 메서드나 변수 자체를 호출하여 손쉽게 확인할 수 있습니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.1단계: 변수 생성하기먼저 학생 정보를 담은 변수를 하나 생성합니다. 다음 쿼리를 사용합니다.> var studentDetails={StudentFirstName:Chris,StudentLastName:Brown,StudentAge:24};2단계:
MongoDB에서 배열 검색 후 인덱스를 새 배열로 출력하기배열 안에서 다른 배열에 포함된 값을 검색하고, 찾은 값들의 인덱스를 새로운 배열로 출력하려면 $indexOfArray 연산자를 사용하면 됩니다. $indexOfArray는 지정한 배열에서 특정 값이 처음 나타나는 위치(인덱스)를 반환하며, 해당 값이 존재하지 않으면 -1을 반환한다는 점을 기억해 두면 좋습니다.먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.> db.demo381.insertOne({Values:[10,40,60,30,60]}); { acknow
MongoDB에서 집계로 배열 길이 구하기MongoDB에서 배열 필드의 요소 개수(길이)를 확인하려면 집계(aggregation) 파이프라인에서 $project 단계와 $size 연산자를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 배열 길이를 구하는 전체 과정을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성먼저 문서가 담긴 컬렉션을 생성합니다. 아래 예제에서는 여러 과목 정보를 담은 details 배열 필드를 포함한 문서를 삽입합니다.> db.demo382.insertOne(... {... N
배열 형태로 저장된 로그 중에서 특정 단어가 포함된 항목만 골라내고 싶다면 aggregate()와 $filter 연산자를 함께 사용하면 됩니다. 이 글에서는 work라는 단어가 들어간 로그만 필터링하는 방법을 예제와 함께 단계별로 살펴보겠습니다. 1. 테스트용 컬렉션 생성 먼저 insertOne() 메서드를 사용해 샘플 문서가 담긴 컬렉션을 만듭니다. 여기서는 서버 이름과 상태 로그 배열을 가진 문서를 하나 삽입합니다. > db.demo383.insertOne( ... { ... ServerName:Jboss
MongoDB 프로젝션(Projection)으로 특정 필드만 표시하기MongoDB에서 프로젝션(Projection)이란 쿼리 결과 중 선택한 필드만 화면에 표시하는 기능을 의미합니다. 표시하고 싶은 필드의 값을 1로 설정하면 해당 필드만 결과에 포함됩니다. 반대로 제외할 필드는 0으로 설정할 수 있습니다.이번 글에서는 컬렉션의 모든 문서에서 단일 필드만 조회하는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo384.ins
MongoDB에서 배열 내 모든 요소를 한 번에 업데이트하려면 $[] 연산자를 사용하면 됩니다. $[]는 올 포지셔널(all positional) 연산자로, 지정된 배열 필드의 모든 요소에 대해 업데이트 작업을 수행하도록 지시합니다.1. 샘플 컬렉션 생성하기먼저 문서가 담긴 컬렉션을 생성해 보겠습니다.> db.demo385.insertOne({ServerLogs: [ ... { ... status:InActive ... }, ... { ... status:InActive ...
MongoDB에서 날짜 구성 요소(연·월·일)를 하나의 날짜로 변환하는 방법MongoDB에서는 연(Year), 월(Month), 일(Day)이 각각 별도의 필드로 저장되어 있는 경우가 많습니다. 이렇게 분리된 날짜 구성 요소를 하나의 날짜 값으로 변환하려면 애그리게이션 파이프라인의 $dateFromParts 연산자와 $dateToString 연산자를 함께 사용하면 됩니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.1단계: 샘플 컬렉션 생성 및 도큐먼트 삽입먼저 날짜 정보가 개별 필드로 저장된 도큐먼트를 포함하는 컬렉션을
MongoDB에서 두 개의 배열을 해제하는 방법 $unwind는 입력 문서에 포함된 배열 필드를 해체(deconstruct)하여, 배열의 각 요소마다 하나의 문서를 출력하는 MongoDB 집계(aggregation) 연산자입니다. 배열을 해제하려면 MongoDB 집계 파이프라인에서 $unwind를 사용하면 됩니다. 먼저 문서가 담긴 컬렉션을 생성해 보겠습니다. > db.demo387.insertOne( ... { ... Name : 101, ... Details1 : [ ... {V
MongoDB에서 문서 내부에 중첩된 배열(하위 속성)의 특정 요소를 제거하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 값을 배열에서 자동으로 찾아 삭제해 주는 강력한 업데이트 연산자입니다.1. 샘플 컬렉션 생성하기먼저 실습을 위해 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo388.insertOne( ... { ... _id: 101, ... userDetails: { ... isMarried: false, ...
MongoDB에서 배열 안에 중첩된 모든 값을 추출하여 하나의 배열로 깔끔하게 표시하고 싶다면, 집계 파이프라인(Aggregation Pipeline)의 $unwind, $project, $group 연산자를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성먼저 문서를 포함하는 컬렉션을 생성합니다. 아래 예제에서는 demo389 컬렉션에 여러 개의 이름(Name) 배열을 가진 문서를 삽입합니다.> db.demo389.insertOne(... {...  
MongoDB의 update() 메서드는 기본적으로 쿼리 조건에 일치하는 첫 번째 문서만 수정합니다. 따라서 조건에 해당하는 모든 문서를 한꺼번에 업데이트하려면 반드시 multi : true 옵션을 함께 지정해야 합니다.아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 demo390이라는 컬렉션을 만들고 문서를 몇 개 삽입합니다.> db.demo390.insertOne({FirstName:Chris}); { acknowledged : true, insertedId : Obj
MongoDB에서 사용자 정의 필드로 인덱싱·정렬·페이지네이션 구현하기MongoDB에서 특정 필드를 기준으로 데이터를 정렬하면서 페이지네이션을 적용하려면, 해당 필드에 인덱스를 미리 생성해 두는 것이 성능 면에서 매우 중요합니다. 이 글에서는 복합 인덱스(compound index)를 생성한 뒤, sort(), limit(), skip() 메서드를 조합해 페이지네이션을 구현하는 전체 과정을 단계별로 살펴봅니다.1단계: 컬렉션 생성과 인덱스 설정먼저 createIndex() 메서드를 사용해 Name 필드와 CountryName 필드를
MongoDB에서 다른 필드를 기준으로 값을 그룹화하려면 $group 연산자와 $project 연산자를 함께 사용해야 합니다. 이번 글에서는 실제 예제를 통해 단계별로 자세히 살펴보겠습니다.1. 샘플 컬렉션 생성하기먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.> db.demo374.insertOne( ... { ... "Name" : "Chris", ... "HobbyDetails" : [ ... &q