MongoDB는 유연성, 확장성, 방대한 양의 데이터를 효율적으로 관리할 수 있는 용량과 같은 뛰어난 기능으로 인해 개발자들 사이에서 큰 인기를 얻고 있습니다. 최신 애플리케이션에 이상적인 솔루션인 MongoDB는 다양한 도구 및 프레임워크와의 원활한 통합을 제공하므로 많은 전문가들이 선호하는 옵션입니다. 이 자습서에서는 MongoDB에서 일반적인 작업 및 작업을 실행하는 데 필요한 전문 지식을 향상시키기 위해 포괄적인 지침을 제공합니다.

사용자 친화적인 소프트웨어를 구축하면서 데이터를 효과적으로 검색하고 관리하려면 일반적인 MongoDB 쿼리 및 조작을 실행하는 숙련도를 향상시키는 것이 중요합니다. 개발자는 이러한 기술을 통해 탄력적인 데이터 구조와 간소화된 애플리케이션 환경을 구축하여 다양한 고객의 요구 사항을 충족할 수 있습니다.

데이터베이스 생성 또는 전환

특히 원격 클러스터가 이전에 구성된 경우, MongoDB 셸을 사용하여 로컬 데이터베이스를 설정하는 것은 비교적 복잡하지 않습니다. MongoDB 내에서 새로운 데이터베이스를 생성하려면 다음 명령을 사용하면 됩니다:

 use db_name 

앞서 언급한 지시어를 사용하면 처음부터 완전히 새로운 데이터베이스를 구축할 필요 없이 기존 데이터베이스로 원활하게 전환할 수 있습니다.

데이터베이스 삭제

먼저, 이전과 마찬가지로 “사용” 명령을 사용하여 원하는 데이터베이스로 전환합니다. 그런 다음 “dropDatabase()” 함수를 사용하여 원하지 않는 데이터베이스를 제거합니다:

 use db_name
db.dropDatabase()

컬렉션 만들기

원하는 데이터베이스에 데이터 컴파일을 설정하려면 “createCollection()” 함수를 사용하여 특정 데이터베이스로 전환해야 합니다. 이 명령을 사용하면 선택한 데이터베이스 내에 새로운 MongoDB 리포지토리를 생성할 수 있습니다.

 db.createCollection("collection_name")

데이터베이스에서 데이터를 추출하고 변환하는 과정은 많은 머신 러닝 작업에서 필수적인 단계이며, 특히 메모리에 맞지 않을 수 있는 대규모 데이터 세트를 다룰 때 더욱 그렇습니다. 이 튜토리얼에서는 SQL 쿼리를 사용해 PostgreSQL 또는 SQLite3 데이터베이스에서 관련 정보를 추출한 다음 추가 분석을 위해 이를 판다스 데이터 프레임으로 변환하는 데 중점을 두겠습니다. 특히, 특정 기준에 따라 행 필터링, 특정 속성별로 레코드 그룹화, 값 집계, 테이블 병합, 결과 정렬과 같은 일반적인 작업을 수행하는 방법을 보여드리겠습니다. 이러한 기본 기술을 숙지하여 제목, 날짜, 매체, 크기, 작가 및 기타 세부 정보(컬렉션에 이러한 데이터가 포함되어 있다고 가정할 때)를 포함하여 전시회의 작품에 대한 정보가 포함된 모든 데이터베이스 테이블에 적용할 수 있도록 하는 것이 목표입니다.

컬렉션에 문서 삽입

컬렉션에 정보를 제출할 때 단독 기록 또는 기록의 배열을 전송할 수 있습니다.

단독 기록을 추가하려면 다음 단계를 따르세요:

 db.collection_name.insertOne({"Name":"Idowu", "Likes":"Chess"})

앞서 언급한 기법을 사용하여 공유 식별자가 있는 문서 배열을 통합할 수 있습니다:

 db.collection_name.insertOne([{"Name":"Idowu", "Likes":"Chess"}, {"Language": "Mongo", "is_admin": true}])

각각 고유 식별자를 가진 여러 문서를 효율적으로 삽입하려면 `insertMany` 메서드를 활용하세요:

 db.collection_name.insertMany([{"Name":"Idowu", "Likes":"Chess"}, {"Name": "Paul", "Likes": "Wordle"}])

컬렉션에서 모든 문서 가져오기

“find()” 함수를 사용하여 특정 컬렉션 내의 모든 문서를 검색할 수 있습니다.

 db.collection_name.find()

앞서 언급한 방법은 지정된 컬렉션에 포함된 모든 문서를 검색합니다:

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

특정 수치를 지정하여 검색되는 정보의 양을 제한할 수 있습니다. 예를 들어, 다음 명령어를 사용하면 첫 번째 보고서 쌍만 검색됩니다:

 db.collection_name.find().limit(2)

컬렉션에서 문서 필터링

MongoDB 데이터베이스 내에서 다양한 필터링 방법을 사용할 수 있습니다. 예를 들어 다음 정보를 살펴보겠습니다.

문서의 특정 필드 내에서 정보를 검색할 때는 여러 필드 또는 전체 문서에서 데이터를 검색할 수 있는 다른 방법과 달리 “찾기” 방법을 활용하는 것이 좋습니다. 이 방법을 사용하면 관련 정보를 보다 타겟팅하고 효율적으로 검색할 수 있습니다.

 db.collection_name.find({"Likes":"Wordle"}, {"_id":0, "Name":1})

앞서 언급한 쿼리는 문서 식별자를 무시하고 각 텍스트에 포함된 이름 목록만 제시하면서 ‘좋아요’ 값이 ‘Wordle’에 해당되는 모든 문서를 검색합니다.

나이가 21세 이상인 사용자 레코드 목록을 검색하려면 컬렉션의 쿼리 매개변수 내에 ‘$gt’ 연산자를 사용합니다.

 db.collection_name.find({"Likes":"Chess", "Age":{"$gt":21}}, {"_id":0, "Name":1})

해당 사용자는 최근 온라인 쇼핑 플랫폼에서 예기치 않은 요금이 부과되고 불편을 겪은 경험에 대해 불만을 표출하고 있는 것으로 보입니다. 이러한 경험은 개인이 플랫폼 사용을 꺼리게 할 수 있으며, 향후 고객 만족도를 개선하고 유사한 문제를 방지하기 위한 조치를 취할 것을 권고합니다.

‘찾기’ 대신 ‘findOne’을 사용하여 행동의 불일치를 관찰해 보세요. 이 용도로 활용할 수 있는 다양한 추가 필터링 키워드가 존재한다는 점에 유의할 필요가 있습니다.

특정 값보다 작은 값은 “$lt”로 표현할 수 있습니다.

구문 “$gte”는 표현식이 참으로 평가되려면 값이 지정된 값보다 크거나 같아야 하는 조건을 나타냅니다.

정의된 임계값과 정확히 일치하는 값을 포함하여 지정된 범위 내에 속하고 이를 초과하지 않는 값입니다.

“$eq” 연산자는 컬렉션에서 지정된 매개 변수와 정확히 동일한 값을 가진 모든 요소를 검색합니다.

논리 연산자 “$ne”은 모든 피연산자가 서로 같지 않으면 참을 반환하고, 그렇지 않으면 거짓을 반환하는 비교를 나타냅니다. 프로그래밍 언어에서 조건문 및 데이터 필터링 연산에 자주 사용됩니다.

“$in” 연산자는 배열을 사용하여 조회할 때 해당 배열 내의 항목에 해당하는 모든 요소를 검색하는 데 사용할 수 있습니다. 반대로 “$not in ($query)” 구문은 “$nin” 연산자와 함께 부정 목적으로 사용되며, 지정된 배열에 포함되지 않은 요소에 대한 결과를 반환합니다.

쿼리 정렬

특정 순서에 따라 조회를 정렬하는 것을 “정렬”이라고 합니다. 이 프로세스를 통해 정보를 내림차순 또는 오름차순으로 구성할 수 있으며, 구현을 위해 정량적 기준에 의존합니다.

대표적인 예로 데이터를 오름차순으로 정렬하는 것을 들 수 있습니다:

 db.collection_name.find({"Likes":"Chess"}).sort({"Age":1})

앞서 언급한 조회를 내림차순으로 정렬하려면 “1”을 “-1″로 대체합니다.

 db.collection_name.find({"Likes":"Chess"}).sort({"Age":-1})

문서 업데이트

몽고DB 업데이트를 수행할 때는 원자 연산자를 사용하여 작업 실행 방식을 지정하는 것이 필수적입니다. 다음은 업데이트 쿼리와 함께 자주 사용되는 일반적인 원자 연산자 목록입니다:

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

MongoDB에서 “$set” 명령을 사용하여 새로운 속성을 추가하거나 기존 속성을 수정할 수 있습니다.

`$push` 함수는 배열에 새 요소를 추가하는 데 사용되며, `$each` 함수는 `$push`와 함께 여러 요소를 동시에 추가하는 데 사용할 수 있습니다.

`$pull` 연산자는 배열에서 특정 요소를 삭제하는 데 사용할 수 있으며, `$in`은 다른 배열에서 일치하는 값을 기준으로 여러 요소를 동시에 제거하는 데 사용됩니다.

문서 내에서 특정 데이터 요소를 삭제하는 작업을 “제거” 또는 “절제”라고 하며, 이 문맥에서는 “$unset” 명령으로 표현됩니다. 이 작업은 문서에서 특정 정보를 삭제하여 현재 상태에서 해당 정보의 존재 여부와 관련성을 효과적으로 무효화합니다.

실제로 기존 문서를 업데이트하면서 새로운 요소를 추가하는 작업은 세부 사항에 주의를 기울이고 문서가 사용될 맥락을 신중하게 고려해야 하는 일반적인 작업입니다. 여기에는 기존 콘텐츠나 구조를 수정하는 것뿐만 아니라 전반적인 가치와 관련성을 높이는 새로운 정보를 통합하는 것도 포함될 수 있습니다. 변경 사항이 의도한 목적과 목표에 부합하는지 확인하는 것이 중요합니다.

 db.collection_name.updateOne({"Name":"Sandy"}, {"$set":{"Name":"James", "email":"[email protected]"}})

앞서 언급한 수정 사항은 아래에 표시된 방식으로 지정된 텍스트를 변경합니다:

이메일 필드에서 `$unset` 연산자를 사용하여 데이터 세트 내에서 효과적으로 존재를 제거하면 이메일 필드에서 자신을 쉽게 제거할 수 있습니다.

 db.collection_name.updateOne({"Name":"Sandy"}, {"$unset":{"email":"[email protected]"}})

기존 컬렉션에 추가 구성 요소를 추가하는 역할을 하는 ‘$push’ 연산자를 사용하여 ‘items’ 배열 내의 현재 요소 모음에 새 요소를 통합할 수 있습니다.

 db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items":"Plantain"}})

결과는 두 그룹 간의 평균 성능 점수에 상당한 차이가 있으며 그룹 2가 그룹 1보다 우수한 것으로 나타났습니다.

Laravel에서 `$each` 연산자를 사용하면 데이터베이스 테이블에 여러 레코드를 동시에 삽입할 수 있으므로 대량의 데이터를 효율적으로 처리할 수 있습니다. 이 연산자는 배열을 반복하고 지정된 테이블 내의 각 레코드에 대해 SQL 문을 생성하여 여러 항목을 추가하는 프로세스를 효과적으로 간소화합니다. 이 방법을 활용하면 개발자는 대량 작업 시 시간과 노력을 절약할 수 있습니다.

 db.collection_name.updateOne({"Name":"Pete"}, {"$push":{"items": {"$each":["Almond", "Melon"]}}})

포스트모더니즘의 개념은 오늘날 사회에서 거대한 내러티브와 이데올로기가 권위를 잃고 현실에 대한 단편적인 이해로 이어졌다고 가정합니다. 이러한 파편화는 미디어와 기술의 확산과 고급 문화와 저급 문화 사이의 경계가 모호해짐에 따라 더욱 심화되고 있습니다. 결과적으로 자아는 중심이 흐려지고 주관적이 되어 개인이 자신만의 신화와 정체성을 구축하게 됩니다. 이러한 맥락에서 객관적인 진리나 보편적인 도덕은 존재하지 않으며, 오히려 복잡한 관계망 속에서 복수의 관점과 가치가 공존한다고 주장할 수 있습니다. 따라서 포스트모던 사회에서 개인의 역할은 이러한 다양한 관점을 탐색하고 공유된 경험을 바탕으로 다른 사람들과 관계를 형성하는 것입니다.

실제로 `$pull` 연산자는 키 값:cy를 통해 배열에서 특정 요소를 효과적으로 제거한다는 점에 주목할 필요가 있습니다. 사용된 프로그래밍 언어에 관계없이, 위에 설명된 기본 쿼리 구조는 MongoDB 데이터베이스와의 인터페이스를 위한 기본 접근 방식을 구성합니다.

이 글도 확인해 보세요:  웹 개발을 위한 가장 인기 있는 8가지 백엔드 프레임워크

기본 규칙의 잠재적인 차이에도 불구하고 Python과 같은 특정 프로그래밍 언어는 뱀 대소문자 구문을 지원하는 반면, JavaScript와 같은 대체 언어는 낙타 대소문자를 활용합니다. 철저한 조사를 통해 선택한 기술 플랫폼에서 선호하는 명명법을 숙지하는 것이 중요합니다.

 db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items":"Plantain"}})

수정된 정보는 다음과 같이 나타납니다:

목록에서 여러 요소를 효율적으로 제거하려면 프로그래밍 언어의 배열 메서드 또는 함수 내에서 “$in” 연산자를 활용하세요. 이 연산자를 사용하면 “$in” 키워드의 입력으로 지정하여 동시에 제거해야 하는 값의 범위를 지정할 수 있습니다. 이렇게 하면 최소한의 코드와 향상된 성능으로 원치 않는 요소를 효과적으로 필터링할 수 있습니다.

 db.collection_name.updateOne({"Name":"Pete"}, {"$pull":{"items": {"$in":["Almond", "Melon"]} }}) 

문서 또는 필드 삭제

“deleteOne” 또는 “deleteMany” 키워드를 사용하면 컬렉션에서 문서를 제거할 수 있습니다. 이러한 키워드는 미리 정해진 필드를 기준으로 문서를 삭제하는 데 사용할 수 있습니다.

 db.collection_name.deleteOne({"Name":"IDNoble"})

공유 키 속성을 가진 다수의 레코드를 제거하려면 해당 특성을 가진 각 문서를 개별적으로 삭제하기보다는 “deleteMany” 방법을 활용하는 것이 좋습니다. 아래 제공된 코드 스니펫은 선호 관심사 목록에 ‘체스’가 포함된 모든 데이터를 삭제합니다.

 db.collection.deleteMany({"Likes":"Chess"})

인덱싱 작업

인덱싱을 통해 쿼리 효율성을 최적화하면 MongoDB가 검사해야 하는 문서의 양을 크게 줄일 수 있어 전반적인 검색 성능이 향상됩니다. 일반적으로 자주 쿼리하는 필드에 인덱스를 설정하는 것이 좋습니다.

MongoDB의 인덱싱 기능을 활용하는 것은 최적의 성능을 위해 SQL 쿼리에 인덱스를 사용하는 것에 비유할 수 있습니다. 예를 들어, ‘이름’ 필드에 내림차순 인덱스를 생성하는 것이 포함됩니다:

 db.collection.createIndex({"Name":1})

제 능력에 대한 포괄적인 이해를 돕기 위해 제가 과거에 수행했던 작업과 프로젝트의 몇 가지 예를 아래에 나열했습니다. 여기에는 다음이 포함됩니다:

 db.collection.getIndexes()

앞서 언급한 접근 방식은 소개용이지만, 지금까지 소개한 것 외에 색인을 구성하기 위한 추가적인 기술이 MongoDB 내에 존재합니다.

집계

집계 파이프라인은 맵리듀스의 정교한 반복으로, 사용자가 몽고DB 영역 내에서 복잡한 계산을 실행하고 보존할 수 있게 해줍니다. 매핑과 축소 프로세스 모두에 대해 별도의 JavaScript 함수를 생성해야 하는 MapReduce와 달리, Aggregation은 네이티브 MongoDB 프로시저만 사용하여 원활한 환경을 제공합니다.

예를 들어, 몇 가지 샘플 판매 수치를 참조로 살펴보겠습니다:

 db.sales.aggregate([{$group:{"_id":"$Section", "totalSold":{$sum:"$Sold"}}}, {$project:{"_id":0, "totalSold":1, "Section":"$_id"}}])

위 쿼리는 후속 정보를 검색합니다:

마스터 몽고DB 쿼리

다양한 쿼리 기법을 활용하여 쿼리 효율성을 향상시키기 위해 설계된 다양한 옵션을 제공합니다.

마스터 몽고DB 쿼리

다양한 쿼리 기법을 활용하여 쿼리 효율성을 높이기 위해 설계된 다양한 옵션을 제공합니다.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.