MongoDB는 애플리케이션 개발 및 확장이 용이하도록 설계된 NoSQL 문서 데이터베이스이다.
MongoDB의 기록은 필드와 값의 쌍의로 구성된 데이터 구조인 문서이다. MongoDB 문서는 JSON 객체와 유사하며 필드 값에는 다른 문서, 배열 및 문서 배열이 포함될 수 있다.
다음과 같은 읽기 및 쓰기 작업을 지원한다.
복제본 세트라고 하는 MongoDB의 복제 기능은 다음을 제공한다.
데이터의 단위. JSON 형식이며 필드-값 쌍의 집합이다.
Document들의 집합으로, 관련된 문서들을 그룹화하여 저장한다.
RDBMS의 테이블과 유사한 개념.
Collection의 집합이다.
RDB VS MongoDB
Database === Database
Table === Collection
Column === Field
Row === Document
Database 내에서 검색 경로를 만들어 주는 데이터 구조이다.
Database를 여러 서버에 분산하여 저장하는 방식을 Sharding이라고 한다. 데이터를 파티션으로 분할하고, 파티션을 각 서버에 배치한다.
여러 대의 서버에 동일한 데이터를 복제하여, 하나의 서버에 문제가 생겨도 다른 서버에서 서비스를 제공할 수 있도록 한다.
데이터를 집계하거나 여러 컬렉션의 데이터를 조합하여 결과를 반환한다.
SQL의 GROUP BY와 비슷한 개념.
$eq, $ne, $gt, $gte, $lt, $lte$in, $nin$and, $or, $not$exists$regex$push, $pull반환할 문서를 나타내는 쿼리 조건자를 지정.
쿼리 조건자: 문서가 지정된 쿼리와 일치하는지 나타내는 부울 값을 반환하는 표현식
db.collection('collection_name').find({})
db.collection('collection_name').find({ status: 'D' })
db.collection('collection_name').find({
status: { $in: ['A', 'D'] }
})
동일한 필드에 동등성 검사를 할 때에는 $or 대신 $in 연산자 사용.
db.collection('collection_name').find({
status: 'A',
qty: { $lt: 30 }
})
db.collection('collection_name'),find({
$or: [{ status: 'A' }, { qty: { $lt: 30} }]
})
db.collection('collection_name').find({
status: 'A',
$or: [{ qty: { $lt: 30 } }, { item: { $regex: '^p' } }]
});
Collection의 검색 속도를 높이기 위한 방법이다. 인덱스가 없는 경우 컬렉션의 모든 문서를 스캔해야 하지만, 쿼리에 적합한 인덱스가 있으면 스캔해야 하는 문서 수를 제한할 수 있다.
하나의 필드를 기준으로 검색할 때 효과적이다.
db.<collection>.createIndex( { <field>: 1 } )
2개 이상의 필드를 기준으로 검색할 때 효과적이다.
특정 텍스트를 포함한 Document를 검색할 때 효과적이다.
멀티 클라우드 데이터베이스 서비스이다. 온디맨드 방식으로 데이터베이스를 쉽게 배포하고 관리할 수 있다.
온디맨드: 사용자가 필요할 때 즉시 자원을 제공