MongoDB의 집계 파이프라인(aggregation pipeline)은 여러 개의 단계(stage)로 구성됩니다. 문서가 파이프라인을 통과하는 동안 각 단계를 거치며 순차적으로 변환되기 때문에, 데이터를 유연하게 가공하고 필터링할 수 있습니다.이 글에서는 집계 파이프라인을 활용해 MongoDB에서 조건에 맞는 레코드를 가져오는 방법을 예제와 함께 살펴보겠습니다. 1. 샘플 컬렉션 생성 먼저 예제에서 사용할 문서들을 포함하는 컬렉션을 생성합니다. > db.demo218.insertOne({"Name":&quo
MongoDB에서 URL 레코드에 저장된 특정 도메인 이름을 대소문자 구분 없이 검색하려면 정규식 옵션 /i를 사용하면 됩니다. 이 옵션은 영문 대소문자를 구분하지 않고 일치 여부를 판단해 주기 때문에, EXAMPLE.com과 example.com처럼 표기가 서로 다른 URL도 단 한 번의 쿼리로 모두 찾아낼 수 있습니다.1. 샘플 데이터 준비하기먼저 데모용 컬렉션을 생성하고 문서를 삽입해 보겠습니다.> db.demo219.insertOne({details:{WebsiteURL:www.EXAMPLE.com}}); { ac
MongoDB에서 내장 문서의 isMarried 값 추출하기MongoDB 컬렉션에 저장된 문서 안에는 다른 문서가 중첩된 형태의 내장(embedded) 문서가 포함될 수 있습니다. 이렇게 중첩된 문서에서 특정 필드만 골라서 조회하고 싶다면 집계(aggregate) 파이프라인의 $project 연산자를 활용하면 됩니다.이번 글에서는 내장 문서에 포함된 isMarried 값을 모두 가져오는 방법을 예제와 함께 살펴보겠습니다.1. 예제 컬렉션 생성 및 문서 삽입먼저 테스트용 컬렉션을 만들고 문서 두 개를 삽입하겠습니다. 각 문서는 det
MongoDB에서 특정 단어를 검색할 때는 정규식(regex)을 활용하면 됩니다. 정규식은 기본적으로 대소문자를 구분하기 때문에, /John/ 패턴은 John과 일치하지만 소문자로 된 john과는 일치하지 않습니다.예제 컬렉션 생성먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo221.insertOne({Details:{StudentName:Chris,StudentAge:21}}); { acknowledged : true, insertedId : ObjectId(5e3ee15d03d395bdc21347
MongoDB 문서의 배열 안에 새로운 요소(필드)를 추가하려면 위치 연산자($)를 update() 메서드와 함께 사용하면 됩니다. 위치 연산자는 쿼리 조건과 일치하는 배열 요소를 자동으로 식별해 주기 때문에, 인덱스 번호를 직접 지정하지 않고도 해당 요소만 정확하게 수정할 수 있습니다.아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.1단계: 컬렉션 생성 및 문서 삽입먼저 insertOne() 메서드를 사용해 샘플 컬렉션을 만들고 문서를 삽입합니다.> db.demo222.insertOne({details:[{Stud
MongoDB에서 여러 속성을 비교하는 방법MongoDB에서 여러 속성(필드)을 서로 비교해야 하는 경우가 종종 있습니다. 예를 들어 배열 내의 두 요소 값을 비교하거나, 문서 내 서로 다른 필드 간의 크기를 비교하고 싶을 때가 그렇습니다. 이럴 때 $where 연산자를 사용하면 JavaScript 표현식을 활용해 원하는 조건의 문서를 조회할 수 있습니다.이번 글에서는 $where 연산자를 사용하여 MongoDB에서 여러 속성을 비교하는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성 및 문서 삽입먼저 데모용 컬렉션을 만들고
MongoDB에서 배열에 저장된 특정 항목을 삭제하려면 $pull 연산자를 사용하면 됩니다. $pull은 지정한 조건과 일치하는 값을 배열에서 모두 제거해 주는 강력한 업데이트 연산자입니다.1. 테스트용 컬렉션 생성하기먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo224.insertOne({ListOfTechnology:[Spring,Hibernate,Java]}); { acknowledged : true, insertedId : ObjectId(5e3ee6d103d395bdc21347
MongoDB에서 배열 필드의 마지막 두 값을 가져오려면 $slice 연산자를 사용하면 됩니다. $slice에 음수 값을 지정하면 배열 끝에서부터 해당 개수만큼의 요소를 반환합니다.샘플 컬렉션 생성하기먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo173.insertOne({ListOfValues:[10,40,100,560,700,900]}); { acknowledged : true, insertedId : ObjectId(5e383a4f9e4f06af551997e4) }컬렉션 문서 조회하기find()
MongoDB에서 중첩된 구조, 즉 배열 내부에 또 다른 배열이 있는 경우 특정 개수만큼 요소를 잘라내고 싶을 때가 있습니다. 이럴 때는 aggregate() 메서드와 함께 $slice 연산자를 사용하면 됩니다.이 글에서는 실제 예제를 통해 배열 안의 배열을 슬라이스하는 방법을 단계별로 살펴보겠습니다.1. 샘플 컬렉션 생성먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. 아래 예제에서는 Details 배열 안에 각 항목마다 다시 Subjects 배열이 들어 있는 중첩 구조를 사용합니다.> db.demo111.insertOne(
MongoDB에서 capped: true 옵션으로 생성한 Capped 컬렉션의 특정 필드를 수정하려면 update() 메서드를 사용하면 됩니다. 이번 글에서는 예제를 통해 Capped 컬렉션을 만들고, 단일 필드를 업데이트하는 전체 과정을 단계별로 살펴보겠습니다. 1. Capped 컬렉션 생성 및 데이터 삽입 먼저 capped: true, size, max 옵션을 지정하여 Capped 컬렉션을 생성하고 문서를 삽입합니다. > db.createCollection(Demo112, { capped : true, size : 14,
MongoDB에서 뷰(View)를 생성하려면 createView() 메서드를 사용합니다. 뷰는 실제 데이터를 저장하지 않고 기존 컬렉션을 기반으로 집계 파이프라인의 결과를 보여주는 가상 컬렉션입니다. 이 글에서는 예제를 통해 뷰를 생성하고 조회하는 전체 과정을 단계별로 살펴보겠습니다. 1. 샘플 컬렉션 생성 및 문서 삽입 먼저 문서를 포함하는 컬렉션을 생성합니다. 아래 예제에서는 demo113이라는 컬렉션에 학생 정보를 담은 문서 하나를 삽입합니다. > db.demo113.insertOne( ... { _id: 1, Stud
MongoDB에서 중복된 이름 값별 최대 점수 구하기최대 점수를 구하려면 group() 메서드를 사용해 컬렉션 내 문서들을 그룹화하면 됩니다. 먼저 예제에 사용할 컬렉션을 생성해 보겠습니다.> db.demo114.insertOne({"Score":60,"Name":"Chris"}); { "acknowledged" : true, "insertedId" : ObjectId("5e2efc57d8f64a552dae6354") }
MongoDB 필드 업데이트와 기존 데이터 수정MongoDB에서 특정 필드를 업데이트하고 해당 열(필드)에 현재 저장되어 있는 데이터를 수정하려면 find() 메서드와 update() 메서드를 함께 사용하면 됩니다. 이 방법은 기존 값을 참조하여 새로운 값으로 변환할 때 특히 유용합니다.먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.> db.demo115.insertOne({LastName:Brown});{ acknowledged : true, insertedId : ObjectId(
MongoDB에서 조건에 일치하는 문서 중 단 하나의 문서만 가져오고 싶다면 findOne() 메서드를 사용하면 됩니다. 이 메서드는 조건에 맞는 여러 문서가 존재하더라도 가장 먼저 발견된 첫 번째 문서만 반환합니다.테스트용 컬렉션 생성하기먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo116.insertOne({EmployeeId:101,EmployeeName:John}); { acknowledged : true, insertedId : ObjectId(5e2eff98d8f64a552d
MongoDB에서 배열(딕셔너리 목록) 안에 있는 값들의 합계를 구하려면 aggregate() 메서드와 함께 $sum 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 모든 문서에 대해 딕셔너리 목록의 값을 집계하는 과정을 단계별로 살펴보겠습니다.1. 컬렉션 생성 및 문서 삽입먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo117.insertOne( ... { ... ID:101, ... Details:[ ... { ...
MongoDB에서 $addFields 애그리게이션 단계와 $filter 연산자를 함께 사용하면 배열 필드의 요소들을 조건에 따라 걸러낸 새로운 필드를 만들 수 있습니다. 이 글에서는 실제 예제를 통해 두 기능을 조합하여 사용하는 방법을 단계별로 살펴보겠습니다.1. 컬렉션 생성 및 문서 삽입하기먼저 예제로 사용할 컬렉션을 생성하고 문서를 삽입합니다. 아래 명령어는 학생 정보와 과목 목록, 그리고 세부 정보(Details) 배열을 포함한 문서를 저장합니다.> db.demo118.insertOne( ... { ...
MongoDB에서 여러 배열을 하나의 배열로 합치기여러 개의 배열을 하나의 배열로 통합하려면 MongoDB의 $project 연산자를 활용하면 됩니다. 먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.> db.demo119.insertOne(... {... _id: 101,... WebDetails: [... &
부울(Boolean) 값은 true와 false 두 가지 값만 가지므로, MongoDB에서는 이 키워드들을 그대로 사용하여 필드에 삽입할 수 있습니다.1. 컬렉션 생성 및 문서 삽입insertOne() 메서드를 사용하여 부울 필드가 포함된 문서를 컬렉션에 삽입해 보겠습니다.> db.demo215.insertOne({EmployeeDetails:[{EmployeeName:David,isMarried:false,Salary:56000}]}); { acknowledged : true, insertedId : ObjectI
MongoDB에서 중첩된 필드 구조를 가진 문서를 다룰 때, 배열에 담긴 개수(Number) 값을 기준으로 데이터를 그룹화해야 하는 경우가 있습니다. 이 글에서는 $objectToArray, $unwind, $group 연산자를 조합하여 중첩 필드를 그룹화하는 방법을 단계별로 살펴보겠습니다. 1. 컬렉션 생성하기 먼저 중첩된 구조를 가진 문서들을 포함하는 컬렉션을 생성하겠습니다. > db.demo99.insertOne( ... { ... Details: ... { ...
MongoDB에서 특정 문서 하나만 제외한 나머지 문서들을 조회하려면 $nor 연산자를 활용하면 됩니다. $nor는 지정한 조건 중 어느 하나라도 일치하는 문서를 모두 배제하고, 그 외의 문서만 반환하는 논리 연산자입니다.1. 테스트용 컬렉션 생성하기먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.> db.demo100.insertOne({Name:Chris,Age:21}); { acknowledged : true, insertedId : ObjectId(5e2d9624b8903cdd865577c0) }