크리스티나 초도로 , 섀넌 브래드쇼 , 오언 브라질 님의 "몽고DB 완벽 가이드" 책을 정리한 포스팅 입니다.
1. 도큐먼트
- MongoDB 데이터의 기본 단위
항목 | 내용 |
형태 |
키-값 집합 (Key-Value Pair)
|
- 키 |
문자형
- 정렬된 상태로 저장됨 - 대소문자를 구분함 - 중복 불가 - null 포함 불가 특수 문자 - . (점)과 $는 특별한 의미를 가짐 |
- 값 |
데이터형과 대소문자를 구분함
|
자료구조 |
다양한 프로그래밍 언어의 자료구조와 유사
- 맵, 해시, 딕셔너리, 객체 등 |
2. 컬렉션
- 도큐먼트의 모음
- 보통 같은 구조의 도큐먼트를 그룹화
- 쿼리 속도 향상
- 효율적인 인덱싱
- 데이터 지역성 향상
특징
항목 | 내용 |
동적 스키마 |
- 하나의 컬렉션 안에 서로 다른 구조의 도큐먼트 존재 가능
|
네이밍 규칙 | - 빈 문자열 불가 - null 문자 불가 - system으로 시작 불가 - $ 사용 불가 |
서브컬렉션 |
- 네임스페이스에 .(점)을 사용하여 서브컬렉션 생성 가능 (parent.child 형태)
|
3. 데이터베이스
- 컬렉션의 모음
- 독립적
- Mongo DB의 단일 인스턴스의 호스팅 대상 단위 (여러 데이터베이스 호스팅 가능)
예약어 | 용도 |
admin | 인증 및 권한 부여 관리 |
local |
서버 정보 저장
- 복제 프로세스 데이터 |
config |
샤딩 관련 메타데이터 저장
|
4. 몽고DB 시작
5. 몽고DB 셸 소개
- 자바스크립트 해석기
예제) 데이터베이스 & 컬렉션 & 도큐먼트
더보기
데이터베이스 선택 (생성)
use db
컬렉션 생성
db.createCollection("movies")
도큐먼트 추가
db.movies.insertOne({"title":"Red Rocket", "director":"Sean Baker", "year":2021})
db.movies.insertMany([
{"title":"Anora", "director":"Sean Baker", "year":2024},
{"title":"The Florida Project", "director":"Sean Baker", "year":2017}
])
예제) CRUD
더보기
읽기
db.movies.find() # 전체 읽기
db.movies.find({year:2024}) # 조건
db.movies.find({director:"Sean Baker"})
수정
db.movies.updateOne({title:"Anora"}, {$set: {year: 2024}})
db.movies.updateMany(
{ director: "Sean Baker" },
{ $set: { year: 2025 } }
)
삭제
db.movies.deleteOne({"title":"Red Rocket"})
db.movies.deleteMany(
{ year: 2024 }
)
6. 데이터형
데이터형 | 설명 |
null | 값 없음 |
boolean | true or false |
number | 숫자형 - NumberInt: 4 byte (signed) - NumberLong: 8 byte (signed) |
string | 문자열 |
date | 날짜 - new Date()로 해야 객체가 생성되어 문자열 표현이 반환됨 |
array | list, stack, queue set |
nested | 중첩된 도큐먼트 - 객체 안에 객체 |
object_id | MongoDB 고유 식별자 - value: ObjectId (모든 도큐먼트에 자동으로 부여됨) - key: _id (12 byte. timestamp + random + counter) ➡️ 여러 장비와 프로세스에 걸쳐 유일성을 보장함 (분산 환경에 최적) |
binary | 이진 데이터 저장 |
code | 실행 가능한 코드 조각 (JavaScript 등) |
예제) 선언
더보기
db.employee.insertOne({
"name": "noah kim",
"age": NumberInt(30),
"start_date": new Date(),
"salary": NumberLong(1000000000),
"skills": ["mongodb", "javascript"],
"address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
},
"profile_img": BinData(0, "iVBORw0KGgoAAAANSUhEUgAAAAUA..."),
"script": Code("function greet() { return 'Hello, World!'; }")
})
예제) 조회
더보기
regex
db.employee.find({name: {"$regex": "^noah.*"}})
array
db.employee.find({skills: {"$in": ['mongodb']} }) # 부분 포함
db.employee.find({skills: {"$all": ["mongodb", "javascript"]} }) # 모두 포함
db.employee.find({skills: {"$elemMatch": { "$gte": "mongodb", "$lte": "mongodb8" } } }) # 요소 별 조건 검색
db.employee.find({skills: {"$size": 2} }) # 배열 길이 기준 검색
db.employee.find({ name: "noah kim" }, { skills: { "$slice": 1 } }) # 배열의 특정 부분만 추출
script
const { MongoClient } = require('mongodb');
async function run() {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = client.db('your_database');
const collection = db.collection('employee');
const employees = await collection.find({ script: { "$exists": true } }).toArray();
employees.forEach(doc => {
const scriptFunc = new Function("return " + doc.script.code)(); // MongoDB에서 가져온 코드 실행
console.log(scriptFunc());
});
await client.close();
}
run().catch(console.error);
- 외부 애플리케이션에서 사용하기
예제) 수정 & 삭제
더보기
date
db.employee.updateMany(
{ start_date: {$gte: new Date("2025-01-01") } }, # 조건
{ $set: { status: "active" } } # 갱신
)
regex
db.employee.updateMany({ name: { $regex: /kim$/ } }, { $set: { title: "senior developer" } } )
db.employee.deleteMany({ name: { $regex: /^A.*/ } } )
array
db.employee.updateOne({ name: "noah kim" }, { $push: { skills: "nodejs" } } ) # 요소 추가
db.employee.updateOne({ name: "noah kim" }, { $pull: { skills: "nodejs" } } ) # 요소 제거
'Database > MongoDB' 카테고리의 다른 글
[몽고DB 완벽 가이드] 6. 특수 인덱스와 컬렉션 유형 (0) | 2025.04.30 |
---|---|
[몽고DB 완벽 가이드] 5. 인덱싱 (0) | 2025.04.29 |
[몽고DB 완벽 가이드] 4. 쿼리 (1) | 2025.04.28 |
[몽고DB 완벽 가이드] 3. 도큐먼트 생성, 갱신, 삭제 (0) | 2025.04.28 |
[몽고DB 완벽 가이드] 1. 몽고DB 소개 (0) | 2025.04.27 |