반응형
해당 글에서는 NoSQL에 대해 이해하며 Document DB의 MongoDB에 대해서 이해하고 메서드를 확인해 봅니다.
1) NoSQL
💡 NoSQL이란?
- ‘Not Only SQL’ 또는 ‘Non-Relational SQL’이라는 의미를 가지며 관계형 데이터베이스 관리 시스템(RDBMS)이 아닌 다른 형태의 데이터 저장소를 의미합니다.
- NoSQL은 대용량 분산 데이터 처리를 위해 개발되었으며 데이터의 구조적 유연성과 확장성을 제공합니다.
[ 더 알아보기 ]
💡 대용량 분산 데이터 처리란?
- 매우 큰 데이터 집합을 여러 대의 컴퓨터로 분할하여 처리하는 것을 말합니다.
- 이렇게 분산된 데이터를 처리하면 빠른 속도와 높은 확장성을 제공할 수 있습니다. 대규모 데이터 처리를 위해서는 대용량 분산 데이터 처리 기술이 필수적입니다.
1. NoSQL 종류
💡 NoSQL의 종류로는 문서 저장소(Doucment Store), 키-값 저장소(Key-Value Store), 열 지향 데이터베이스(Wide-Column Store), 그래프 저장소(Graph Store)의 형태를 가지고 있습니다
구분 | 정의 | 특징 | 종류 |
문서 저장소 (Doucment Store) |
데이터 및 메타데이터는 데이터베이스 내의 JSON 기반 문서에 계층적으로 저장됩니다. | 유연한 데이터 구조를 가질 수 있음 | MongoDB, Couch DB |
키-값 저장소 (Key-Value Store) |
NoSQL 데이터베이스 중 가장 간단하며, 데이터가 키-값 쌍 컬렉션으로 표시됩니다. | 단순하고 빠른 읽기/쓰기가 가능 | Redis, Riak |
열 지향 데이터베이스 (Wide-Column Store) |
관련 데이터가 단일 열 내부에 중첩 키/값 쌍 세트로 저장됩니다. | 대량의 데이터를 빠르게 처리할 수 있음 | Cassandra, HBase |
그래프 저장소 (Graph Store) |
데이터가 그래프 구조에 노드, 에지 및 데이터 속성으로 저장됩니다. | 복잡한 관계를 가진 데이터를 저장하고 조회할 수 있음 | Neo4j, ArangoDB |
2. NoSQL 특징
특징 | 설명 |
스키마가 존재하지 않습니다. | 데이터에 대한 사전 정의가 필요하지 않아 데이터 모델링이 간단하고 유연한 데이터 저장과 검색이 가능합니다. |
수평적 확장이 가능합니다 | 더 많은 서버를 추가함으로써 데이터베이스 처리 능력을 향상시킬 수 있다. 대규모 데이터 처리에 유용합니다. |
다양한 데이터 모델을 제공합니다 | 각각의 데이터 형식에 맞게 Key-value, document, column family, graph 등 다양한 형태의 데이터 모델을 제공합니다. |
높은 가용성을 보장합니다 | 다수의 노드를 이용하여 데이터를 저장하므로 한 노드가 다운되어도 다른 노드에서 데이터를 읽을 수 있다. 대규모 서비스에서 매우 중요한 요소 중 하나입니다. |
[ 더 알아보기 ]
💡 수평적 확장과 수직적 확장은 뭘까?
- 수평적 확장 : 서버 수를 늘리는 것을 의미합니다. NoSQL 데이터베이스에서는 데이터를 여러 노드에 분산하여 저장하고 처리함으로써 시스템의 용량과 처리량을 확장할 수 있습니다.
- 수직적 확장 : 서버의 성능을 향상시키기 위해 하드웨어를 업그레이드하는 것을 의미합니다. 일반적으로 CPU, 메모리, 디스크 등의 하드웨어 요소를 더 강력한 것으로 교체하거나 추가하여 시스템의 성능을 개선하는 방법입니다.
💡NoSQL은 왜 수평적인 확장이 가능한가?
- NoSQL 데이터베이스가 데이터를 여러 노드에 분산하여 저장하고 처리할 수 있는 구조를 가지고 있기 때문입니다. 데이터를 여러 노드에 분산하여 저장함으로써 데이터베이스의 용량과 처리량을 확장할 수 있으며, 이를 통해 대규모 데이터 및 트래픽을 처리하는데 더 효율적이고 확장 가능한 시스템을 구축할 수 있습니다.
💡 NoSQL의 수평적인 확장을 하는 방법
- 샤딩(Sharding): 데이터를 파티션으로 나누어 여러 노드에 분산 저장합니다. 각 노드는 자체 하위 집합 데이터를 관리하며, 이렇게 분산된 데이터는 전체 시스템에서 처리됩니다.
- 레플리케이션(Replication): 데이터를 여러 노드에 복제하여 저장합니다. 이는 데이터의 가용성과 내구성을 향상시키는 데 도움이 됩니다. 레플리케이션은 읽기 작업을 분산하여 처리하고, 장애 발생 시 데이터의 손실을 방지할 수 있습니다.
- 로드 밸런싱(Load Balancing): 요청이 균등하게 분산되도록 트래픽을 조절하는 메커니즘을 구현합니다. 이를 통해 각 노드의 작업 부하를 균형 있게 분산시킬 수 있습니다.
- 자동 스케일링(Auto Scaling): 시스템의 부하에 따라 자동으로 노드를 추가하거나 제거하여 수평적인 확장을 지원합니다. 이는 대량의 데이터나 트래픽이 발생할 때 유연하게 확장할 수 있는 장점을 제공합니다.
3. NoSQL vs RDBMS 차이 비교
비교항목 | NoSQL | RDBMS |
데이터 모델 | 비 관계형 모델 | 관계형 모델 |
스키마 | 동적 | 정적 |
확장성 | 수평적 | 수직적 |
쿼리 언어 | 제한적 | SQL |
데이터 일관성 | 유연 | 일관성 보장 |
트랜잭션 처리 | 제한적 | ACID 보장 |
데이터 무결성 | 제한적 | 높음 |
대규모 분산처리 | 지원 | 어려움 |
용도 | 대규모 분산 DB | 정형 데이터 DB |
[ 더 알아보기 ]
💡 ACID 란?
- 데이터베이스 관리 시스템에서 데이터의 일관성, 독립성, 지속성, 격리성을 보장하기 위한 속성을 의미합니다. ACID는 다음과 같은 의미를 가집니다.
- Atomicity (원자성): 트랜잭션의 모든 작업이 완료되거나, 아니면 전혀 수행되지 않아야 함.
- Consistency (일관성): 트랜잭션이 완료된 후에도 데이터베이스가 항상 일관된 상태를 유지해야 함.
- Isolation (격리성): 여러 트랜잭션이 동시에 실행될 때, 각각의 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 함.
- Durability (지속성): 트랜잭션에 의해 변경된 데이터는 영구적으로 유지되어야 함.
💡 NoSQL과 RDBMS의 트랜잭션 속도는 어떤 것이 더 빠를까? ⭐️⭐️⭐️
- RDBMS는 트랜잭션 처리를 위해 ACID 원칙을 따릅니다. 이는 데이터 일관성을 보장하기 위해 매우 엄격한 접근 방식을 취하며, 이로 인해 처리 속도가 느릴 수 있습니다. 또한, 트랜잭션 처리를 위해 ACID 원칙을 완전히 따르지 않습니다. 이는 속도를 높이기 위해 데이터 일관성을 제한할 수 있기 때문입니다. 따라서, 트랜잭션 처리 속도를 중요하게 생각하는 경우 RDBMS를 선택하는 것이 좋습니다. 그러나 대용량 데이터 처리를 위해 높은 처리 속도가 필요한 경우, mongoDB가 더 적합할 수 있습니다.
💡 NoSQL과 RDBMS의 조회(SELECT) 속도는 무엇이 더 빠를까? ⭐️⭐️⭐️
- 일반적으로 MongoDB는 RDBMS보다 더 빠르게 SELECT 쿼리를 처리합니다. 이는 MongoDB가 NoSQL 데이터베이스이며 RDBMS와는 다른 방식으로 데이터를 저장하고 쿼리를 실행하기 때문입니다.
그러나 이는 모든 상황에서 유효하지 않을 수 있습니다. 데이터 스키마, 인덱싱, 쿼리 복잡성 등 상황에 따라 MongoDB와 RDBMS의 성능이 다를 수 있습니다.
2) Document DB & Mongo DB
💡 DocumentDB
- NoSQL 데이터베이스의 한 유형으로 ‘비 정형 데이터’를 저장하고 조회하기 위해 사용되는 데이터베이스입니다.
- 문서 데이터베이스는 JSON 또는 XML과 같은 문서 형식으로 데이터를 저장하며, 각 문서는 고유한 식별자를 가지고 있습니다. 이러한 데이터베이스는 유연하고 확장 가능하며, 대규모의 데이터를 처리하는 데 효율적입니다.
💡 MongoDB 란?
- ‘비 관계형 데이터베이스 관리시스템’으로 테이블과 행 대신에 유연한 문서를 활용해 다양한 데이터 형식을 처리하고 저장합니다.
- NoSQL 모델 중 Document DB로 데이터 및 메타데이터는 데이터베이스 내의 JSON 기반 문서에 계층적으로 저장됩니다.
3) RDBMS와 비교하여 MongoDB의 차이는 무엇인가?
💡 RDBMS와 비교하여 MongoDB의 차이⭐️⭐️⭐️
1. 테이블 구조
- RDBMS는 테이블 구조를 가지는 형태로 데이터가 저장이 됩니다. No-SQL의 경우는 테이블 구조를 따르지 않고 Key-Value, Document, Graph 등의 형태로 저장이 됩니다.
2. ACID, 데이터 무결성
- RDBMS는 ACID (원자성, 일관성, 고립성, 지속성) 특성을 보장하며, 데이터의 무결성과 일관성을 유지합니다. No-SQL의 경우는 ACID 특성을 보장하지 않으며, 데이터 일관성과 무결성을 보장하지 않기에 데이터 신뢰성이 떨어질 수 있습니다.
3. 데이터 처리의 최적화
- RDBMS의 경우 상대적으로 대용량 데이터 처리에 효율적이지 않습니다. No-SQL의 경우는 대용량 데이터 처리에 효율적입니다.
4. 조회 속도
- Document DB가 텍스트 형태로 구성되어 있어서 상대적으로 RDBMS보다 조회 속도가 빠릅니다.
5. 등록, 수정, 삭제 속도
- RDBMS가 Document DB보다 속도가 더 빠릅니다.
6. 사용 목적
- RDBMS는 데이터 일관성과 신뢰성을 중요시하는 경우에 적합하며, 등록, 수정, 삭제 작업이 빈번한 애플리케이션에 적합합니다. NoSQL(Document)은 대규모 데이터를 다루는 경우와 데이터 모델링이 자주 변경되는 경우에 적합합니다. 또한 수평적 확장이 가능하기 때문에 대규모 데이터 처리에 유리합니다
4) MongoDB 구조
💡 DocumentDB에서 가장 많이 사용되는 MongoDB에 대해 상세하게 알아봅니다.
RDBMS | MongoDB | 설명 |
테이블(Table) | 컬렉션(Collection) | MongoDB 문서(Document)의 그룹으로, RDBMS에서의 테이블(Table)과 유사합니다. |
행(Row) | 문서(Document) | MongoDB에서 데이터를 저장하는 단위입니다. JSON 형태로 저장되며, 필드와 값의 쌍으로 구성됩니다. |
열(Column) | 필드(Field) | 문서 내에서 데이터를 식별하는 데 사용되는 이름입니다. |
값(Value) | 값(Value) | 문서 내에서 필드에 할당된 데이터입니다. |
인덱스(Index) | 인덱스(Index) | 컬렉션 내에서 검색을 빠르게 하기 위해 필드 값을 저장 및 정렬하는 데이터 구조입니다. |
SELECT 문 | 쿼리(Query) | MongoDB에서 데이터를 검색하는 명령어입니다. |
💡 MongoDB의 구조
- Database 공간에 여러 개의 Collection이 존재하고 안에는 Document들로 구성이 되어 있습니다.
5) MongoDB 구조 : 컬렉션(Collection) 함수
💡 컬렉션(Collection)
- MongoDB에서는 데이터를 컬렉션 단위로 저장합니다. 컬렉션은 문서들의 그룹이며, 관련된 데이터를 함께 저장합니다.
- RDBMS와 비교하자면 ‘테이블’을 의미합니다.
메서드 | 설명 |
db.collection.analyzeShardKey() | 샤드 키를 평가하기 위한 메트릭을 계산합니다. |
db.collection.aggregate() | 집계 파이프라인에 액세스할 수 있습니다. |
db.collection.bulkWrite() | 대량 쓰기 작업 기능을 제공합니다. |
db.collection.configureQueryAnalyzer() | 컬렉션에 대한 쿼리 샘플링을 구성합니다. |
db.collection.count() | 컬렉션 또는 뷰의 문서 수를 반환하는 count 명령을 래핑합니다. |
db.collection.countDocuments() | $group 집계 단계와 $sum 표현식을 사용하여 컬렉션 또는 뷰의 문서 수를 반환합니다. |
db.collection.createIndex() | 컬렉션에 인덱스를 작성합니다. |
db.collection.createIndexes() | 컬렉션에 하나 이상의 인덱스를 작성합니다. |
db.collection.dataSize() | 컬렉션의 크기를 반환합니다. collStats 명령의 collStats.size 필드를 래핑합니다. |
db.collection.distinct() | 지정된 필드에 대해 고유한 값을 가진 문서의 배열을 반환합니다. |
db.collection.drop() | 데이터베이스에서 지정된 컬렉션을 제거합니다. |
db.collection.dropIndex() | 컬렉션의 지정된 인덱스를 제거합니다. |
db.collection.dropIndexes() | 컬렉션의 모든 인덱스를 제거합니다. |
db.collection.ensureIndex() | 삭제되었습니다. 대신 db.collection.createIndex를 사용하세요. |
db.collection.estimatedDocumentCount() | count 명령을 래핑하여 컬렉션 또는 뷰의 문서 수를 근사 값으로 반환합니다. |
db.collection.explain() | 다양한 메서드의 쿼리 실행에 대한 정보를 반환합니다. |
db.collection.findOneAndDelete() | 하나의 문서를 찾아서 삭제합니다. |
db.collection.findOneAndReplace() | 하나의 문서를 찾아서 대체합니다. |
db.collection.findOneAndUpdate() | 하나의 문서를 찾아서 업데이트합니다. |
db.collection.getIndexes() | 컬렉션에 대한 기존 인덱스를 설명하는 문서 배열을 반환합니다. |
db.collection.getShardDistribution() | 샤딩된 클러스터의 컬렉션에 대해 청크 분포 데이터를 보고합니다. |
db.collection.getShardVersion() | 샤딩된 클러스터에 대한 내부 진단 메서드입니다. |
db.collection.hideIndex() | 쿼리 플래너에서 인덱스를 숨깁니다. |
db.collection.isCapped() | 컬렉션이 capped 컬렉션인지 여부를 보고합니다. |
db.collection.latencyStats() | 컬렉션에 대한 지연 시간 통계를 반환합니다. |
db.collection.mapReduce() | 맵-리듀스 스타일의 데이터 집계를 수행합니다. |
db.collection.reIndex() | 컬렉션의 모든 기존 인덱스를 다시 작성합니다. |
db.collection.renameCollection() | 컬렉션의 이름을 변경합니다. |
db.collection.stats() | 컬렉션의 상태에 대한 보고서를 제공합니다. collStats 명령을 래핑합니다. |
db.collection.storageSize() | 컬렉션에서 사용하는 총 크기를 바이트 단위로 보고합니다. collStats 출력의 collStats.storageSize 필드를 래핑합니다. |
db.collection.totalIndexSize() | 컬렉션의 인덱스에서 사용하는 총 크기를 보고합니다. collStats 출력의 collStats.totalIndexSize 필드를 래핑합니다. |
db.collection.totalSize() | 컬렉션의 총 크기를 보고합니다. 이는 컬렉션의 모든 문서와 모든 인덱스의 크기를 포함합니다. |
db.collection.unhideIndex() | 쿼리 플래너에서 인덱스의 숨김을 해제합니다. |
db.collection.watch() | 컬렉션에 대한 변경 스트림을 설정합니다. |
db.collection.validate() | 컬렉션에 대한 진단 작업을 수행합니다. |
[ 더 알아보기 ]
💡 컬렉션은 직접 생성하지 않아도 생기던데 그건 뭘까? ⭐️⭐️⭐️⭐️⭐️⭐️
- 컬렉션이 처음 사용될 때 자동으로 생성되며, 문서를 추가하면 컬렉션이 동적으로 생성됩니다. 따라서 컬렉션을 미리 생성하지 않아도 문서를 추가하는 과정에서 자동으로 생성됩니다.
1. db.createCollection()
💡 기본구조의 인자
- name : 생성할 컬렉션의 이름을 의미합니다.
-- 컬렉션 생성의 기본 구조
db.createCollection(name, options)
💡 Collection의 옵션 선택
-- 컬렉션 생성 + 옵션 선택
db.createCollection( <name>,
{
capped: <boolean>,
timeseries: { // Added in MongoDB 5.0
timeField: <string>, // required for time series collections
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3
bucketRoundingSeconds: <number> // Added in MongoDB 6.3
},
expireAfterSeconds: <number>,
clusteredIndex: <document>, // Added in MongoDB 5.3
changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0
size: <number>,
max: <number>,
storageEngine: <document>,
validator: <document>,
validationLevel: <string>,
validationAction: <string>,
indexOptionDefaults: <document>,
viewOn: <string>,
pipeline: <pipeline>,
collation: <document>,
writeConcern: <document>
}
)
옵션 | 설명 |
capped | 컬렉션을 capped 컬렉션으로 생성할지 여부를 지정합니다. |
timeseries | MongoDB 5.0부터 추가된 옵션으로, 시계열 컬렉션을 생성할 때 필요한 옵션입니다. |
expireAfterSeconds | 문서가 생성된 후 일정 시간이 지난 후에 삭제될지 여부를 지정합니다. |
clusteredIndex | MongoDB 5.3부터 추가된 옵션으로, 클러스터형 인덱스를 사용할지 여부와 인덱스 설정을 지정합니다. |
changeStreamPreAndPostImages | MongoDB 6.0부터 추가된 옵션으로, 변경 스트림 이벤트에 전/후 이미지가 포함될지 여부와 이미지 설정을 지정합니다. |
size | 컬렉션의 초기 크기를 지정합니다. |
max | 컬렉션에 저장될 수 있는 최대 문서 개수를 지정합니다. |
storageEngine | 컬렉션에 사용할 스토리지 엔진을 지정합니다. |
validator | 컬렉션에 적용할 문서 유효성 검사 규칙을 지정합니다. |
validationLevel | 유효성 검사 규칙을 적용할 수준을 지정합니다. |
validationAction | 유효성 검사 실패 시 수행할 동작을 지정합니다. |
indexOptionDefaults | 인덱스 옵션의 기본값을 지정합니다. |
viewOn | 뷰 컬렉션을 생성하기 위해 기존 컬렉션을 참조합니다. |
pipeline | 뷰 컬렉션을 생성할 때 사용할 집계 파이프라인을 지정합니다. |
collation | 컬렉션에 적용할 콜레이션 설정을 지정합니다. |
writeConcern | 컬렉션에 기본으로 적용될 쓰기 확인 설정을 지정합니다. |
💡 [참고] 추후 Robo3T를 이용한 툴에서 저장한 상태를 확인할 수 있습니다.
[ 더 알아보기 ]
💡 컬렉션 이름 생성의 명명제한
1. 컬렉션의 이름은 대소문자를 구분합니다 ex) Collection과 collection은 다른 이름입니다.
2. 컬렉션의 이름에는 알파벳 소문자, 대문자, 숫자, 하이픈(-) 및 밑줄(_)만 사용할 수 있습니다. 또한 공백을 포함해서는 안됩니다.
3. 컬렉션의 이름의 길이 제한은 64자 미만입니다.
4. 컬렉션의 이름은 숫자로 시작해서는 안 됩니다.
6) MongoDB 구조 : 문서(Document) 함수
💡 Collection 내의 Doucent에 대해 수행되는 명령어에 대해 확인합니다.
1. Document 요약
메서드 | 설명 |
db.collection.find() | 컬렉션에서 문서를 검색하고 반환합니다. |
db.collection.findOne() | 컬렉션에서 쿼리를 수행하고 하나의 문서를 반환합니다. |
db.collection.insertOne() | 컬렉션에 단일 문서를 삽입합니다. |
db.collection.insertMany() | 컬렉션에 여러 문서를 삽입합니다. |
db.collection.updateOne() | 컬렉션에서 단일 문서를 업데이트합니다. |
db.collection.updateMany() | 컬렉션에서 여러 문서를 업데이트합니다. |
db.collection.replaceOne() | 컬렉션에서 단일 문서를 교체합니다. |
2. db.collection.find()
💡 db.collection.find()
-지정된 Collection에서 쿼리 조건에 해당되는 ‘모든’ Doucument를 검색하는 메서드입니다.
파라미터 | 필수 여부 | 설명 |
query | 선택 | 원하는 도큐먼트를 찾기 위한 쿼리 조건을 지정합니다. 예를 들어, { name: "John" }와 같이 필드와 값을 지정하여 특정 도큐먼트를 찾을 수 있습니다. |
filter | 선택 | 검색 결과에서 반환할 필드를 지정합니다. 기본적으로는 모든 필드가 반환되지만, 필요한 필드만 지정하여 결과를 필터링할 수 있습니다. |
options | 선택 | 검색 옵션을 설정합니다. 예를 들어, sort, limit, skip 등의 옵션을 지정하여 검색 결과를 정렬하거나 제한할 수 있습니다 |
-- 기본구조
db.collection.find( <query>, <filter>, <options> )
-- 예시
db.collection.find(
{ name: "John" },
{ age: 1, city: 1 },
{ sort: { age: -1 }, limit: 10 }
)
3. db.collection.findOne()
💡 db.collection.findOne()
- 지정된 Collection에서 쿼리 조건에 해당하는 ‘첫 번째’ Doucument를 검색하는 메서드입니다.
파라미터 | 선택 | 설명 |
query | 선택 | 원하는 도큐먼트를 찾기 위한 쿼리 조건을 지정합니다. db.collection.findOne() 함수는 첫 번째로 일치하는 도큐먼트만 반환하므로, query를 정확히 지정하여 특정 도큐먼트를 찾을 수 있습니다. |
filter | 선택 | 검색 결과에서 반환할 필드를 지정합니다. 기본적으로는 모든 필드가 반환되지만, 필요한 필드만 지정하여 결과를 필터링할 수 있습니다. |
options | 선택 | 검색 옵션을 설정합니다. 예를 들어, sort, limit, skip 등의 옵션을 지정하여 검색 결과를 정렬하거나 제한할 수 있습니다. |
-- 기본구조
db.collection.findOne( <query>, <projection>, <options> )
-- 예시
db.collection.findOne(
{ name: "John" },
{ age: 1, city: 1 }
)
4. db.collection.insertOne()
💡 db.collection.insertOne(document)
- 지정된 Collection에서 ‘단일’ Doucument를 삽입하는 메서드입니다.
파라미터 | 필수여부 | 설명 |
document | 필수 | 컬렉션에 삽입할 문서입니다. |
writeConcern | 선택 | 삽입 옵션을 지정합니다 https://www.mongodb.com/docs/manual/reference/write-concern/ |
-- 기본구조
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
-- 예시
db.collection.insertOne(
{ name: "John", age: 30, city: "New York" }
)
5. db.collection.insertMany()
💡 db.collection.insertMany()
- 지정된 Collection에서 ‘여러’ Doucument를 삽입하는 메서드입니다.
파라미터 | 필수 여부 | 설명 |
document | 필수 | 컬렉션에 삽입할 문서입니다. |
writeConcern | 선택 | 삽입 옵션을 지정합니다 https://www.mongodb.com/docs/manual/reference/write-concern/ |
ordered | 선택 | 인스턴스가 정렬된 삽입을 수행해야 하는지 또는 정렬되지 않은 삽입을 수행 해야 하는지 지정하는 진위형을 의미합니다.(default: true) |
-- 기본구조
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
-- 예시
db.collection.insertMany([
{ name: "John", age: 30, city: "New York" },
{ name: "Jane", age: 25, city: "Los Angeles" },
{ name: "Mike", age: 35, city: "Chicago" }
])
6. db.collection.updateOne()
💡 db.collection.updateOne()
- 지정된 Collection에서 ‘단일’ Doucument를 ‘수정’하는 메서드입니다.
파라미터 | 필수 여부 | 설명 |
filter | 필수 | 업데이트할 도큐먼트를 선택하는 필터 조건을 지정합니다. 예를 들어, { name: "John" }와 같이 필드와 값을 지정하여 특정 도큐먼트를 선택할 수 있습니다. |
update | 필수 | 업데이트할 내용을 지정합니다. 업데이트 연산자를 사용하여 필드의 값을 변경하거나 추가할 수 있습니다. |
options | 선택 | 업데이트 옵션을 설정합니다. 예를 들어, upsert 옵션을 사용하여 조건에 맞는 도큐먼트가 없을 경우 새로운 도큐먼트를 삽입할 수 있습니다. |
-- 기본구조
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
-- 예시-1
db.collection.updateOne(
{ name: "John" },
{ $set: { age: 35 } }
)
7. db.collection.updateMany()
💡 db.collection.updateMany()
- 지정된 Collection에서 ‘여러’ Doucument를 ‘수정’하는 메서드입니다.
파라미터 | 필수여부 | 설명 |
filter | 필수 | 업데이트할 도큐먼트를 선택하는 필터 조건을 지정합니다. 예를 들어, { name: "John" }와 같이 필드와 값을 지정하여 특정 도큐먼트를 선택할 수 있습니다. |
update | 필수 | 업데이트할 내용을 지정합니다. 업데이트 연산자를 사용하여 필드의 값을 변경하거나 추가할 수 있습니다. |
options | 선택 | 업데이트 옵션을 설정합니다. 예를 들어, upsert 옵션을 사용하여 조건에 맞는 도큐먼트가 없을 경우 새로운 도큐먼트를 삽입할 수 있습니다. |
-- 기본구조
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
-- 예시
db.collection.updateMany(
{ name: "John" },
{ $set: { age: 35 } }
)
8. db.collection.replaceOne()
💡 db.collection.replaceOne()
- 지정된 Collection에서 ‘단일’ Doucument를 ‘대체’하는 메서드입니다.
파라미터 | 필수여부 | 설명 |
filter | 필수 | 대체할 문서를 선택하기 위한 조건을 나타내는 객체입니다. |
replacement | 필수 | 대체할 문서를 나타내는 객체입니다. |
options | 선택 | 대체에 대한 옵션을 지정하는 객체입니다. |
-- 기본구조
db.collection.replaceOne(
<filter>,
<replacement>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in 4.2.1
}
)
db.collection.replaceOne(
{ name: "John" },
{ name: "John", age: 35, city: "New York" }
)
[ 더 알아보기 ]
💡 update()와 replace()는 무슨 차이인가?
- update()는 기존의 Document를 업데이트하고 필드의 값을 변경하거나 추가할 수 있습니다.
- replace()는 기존의 Doucment를 대체합니다. 새로운 Document를 전달하여 기존의 Doucument를 완전히 대체합니다. (대체를 하게 되면 새로운 도큐먼트의 필드와 값을 쌍으로 구성이 됩니다.)
9. db.collection.deleteOne()
💡 db.collection.deleteOne()
- 지정된 Collection에서 ‘단일’ Doucument를 ‘삭제’하는 메서드입니다.
파라미터 | 필수여부 | 설명 |
filter | 필수 | 이 파라미터는 삭제할 도큐먼트를 선택하는 필터 조건을 지정합니다. |
options | 선택 | 삭제에 대한 옵션을 지정하는 객체입니다. |
collation | 선택 | 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 통해 사용자는 문자 대소문자 및 악센트 표시 규칙과 같은 문자열 비교를 위한 언어별 규칙을 지정할 수 있습니다. |
-- 기본구조
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
-- 예시-1
db.collection.deleteOne({ name: "John" })
10. db.collection.deleteMany()
💡 db.collection.deleteMany()
- 지정된 Collection에서 ‘여러’ Doucument를 ‘삭제’하는 메서드입니다.
파라미터 | 필수여부 | 설명 |
filter | 필수 | 이 파라미터는 삭제할 도큐먼트를 선택하는 필터 조건을 지정합니다. |
options | 선택 | 삭제에 대한 옵션을 지정하는 객체입니다. |
collation | 선택 | 작업에 사용할 데이터 정렬을 지정합니다. 데이터 정렬을 통해 사용자는 문자 대소문자 및 악센트 표시 규칙과 같은 문자열 비교를 위한 언어별 규칙을 지정할 수 있습니다. |
-- 기본구조
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
-- 예시-1
db.collection.deleteMany({ name: "John" })
오늘도 감사합니다. 😀
반응형
'DB > 이론 및 문법' 카테고리의 다른 글
[DB] 관계형 데이터베이스(RDBMS) 구조 : DDL, DML, DCL, TCL (1) | 2023.11.14 |
---|---|
[DB/mongo] Document DB 이해하기 -2 : MongoDB 및 Robo 3T 설치 및 사용예시 (0) | 2023.09.24 |
[DB/Postgres] 뷰 테이블(View Table) 이해하고 활용하기 (0) | 2023.09.22 |
[DB] 관계형 데이터베이스 키(Key) 이해하기 (0) | 2023.09.09 |
[DB/Postgres] PL/pgSQL 구성하기 -2 : DBeaver 기반 구축 및 활용 (0) | 2023.04.17 |