📌 MongoDB 쿼리 기초
MongoDB는 NoSQL 데이터베이스로, JSON과 유사한 형태로 데이터를 저장합니다. 이를 통해 유연하고 빠른 개발이 가능하지만, SQL 기반의 관계형 데이터베이스와는 다르게 데이터를 저장하고 조회하는 방식이 조금 다릅니다.
🚦 동작 원리 및 구조
MongoDB에서 데이터는 컬렉션(Collection) 안에 문서(Document) 형태로 저장됩니다. 이때, 문서는 JSON과 비슷한 BSON(Binary JSON) 형식으로 저장되며, 각 문서는 키-값 쌍으로 이루어져 있습니다. MongoDB는 비정형 데이터를 다루기에 적합하며, 스키마가 유연합니다.
💻 코드 예시 및 흐름 분석
생성 (Create)
MongoDB에서 데이터를 생성하는 방법은 insertOne()과 insertMany()를 사용하는 것입니다.
- insertOne() : 단일 문서를 컬렉션에 삽입합니다.
- insertMany() : 여러 문서를 한 번에 삽입합니다.
MongoDB 예시:
// 단일 문서 삽입
db.users.insertOne({ name: "Alice", age: 30, address: "123 Maple St" })
// 여러 문서 삽입
db.users.insertMany([
{ name: "Bob", age: 25, address: "456 Oak St" },
{ name: "Charlie", age: 35, address: "789 Pine St" }
])
MySQL 예시 (비교):
-- 단일 레코드 삽입
INSERT INTO users (name, age, address) VALUES ('Alice', 30, '123 Maple St');
-- 여러 레코드 삽입
INSERT INTO users (name, age, address) VALUES
('Bob', 25, '456 Oak St'),
('Charlie', 35, '789 Pine St');
읽기 (Read)
MongoDB에서 데이터를 조회하는 데는 find()를 사용합니다.
- find() : 조건에 맞는 문서를 조회합니다.
MongoDB 예시:
// 모든 문서 조회
db.users.find()
// 특정 필드 조회
db.users.find({}, { name: 1, address: 1 })
// 조건에 맞는 문서 조회
db.users.find({ address: "서울" })
MySQL 예시 (비교):
-- 모든 레코드 조회
SELECT * FROM users;
-- 특정 열 조회
SELECT name, address FROM users;
-- 조건에 맞는 레코드 조회
SELECT * FROM users WHERE address = '서울';
db.users.find( // Collection
{ age: { $gt: 18 } }, // Query Criteria
{ name: 1, address: 1, age: 1 } // Projection
).limit(5); // Cursor Modifier
구문설명참조 구문
Collection | 쿼리를 실행할 MongoDB의 컬렉션 이름을 지정합니다. 여기서는 users 컬렉션입니다. | db.<collection>.find() 예시: db.users.find() |
Query Criteria | 쿼리 조건: 문서를 필터링하는 조건입니다. age가 18보다 큰 문서를 찾습니다. | { <field>: { $gt: <value> } } 예시: { age: { $gt: 18 } } $gt: greater than, 값보다 큰 필드를 찾을 때 사용 |
Projection | 프로젝션: 반환할 필드를 지정합니다. name, address, age 필드만 반환하도록 설정. | { <field>: 1 } 예시: { name: 1, address: 1, age: 1 } 1: 해당 필드를 반환하겠다는 의미 |
Cursor Modifier | 커서 수정자: 조회 결과의 개수를 제한합니다. 여기서는 최대 5개의 문서만 반환합니다. | .limit(<number>) 예시: .limit(5) limit(): 반환할 문서 수를 제한 |
참고 설명
- Collection (컬렉션)
db.users.find()는 MongoDB에서 users라는 컬렉션에서 데이터를 조회하라는 의미입니다. - Query Criteria (쿼리 조건)
{ age: { $gt: 18 } }는 age가 18보다 큰 문서를 찾는 조건입니다. $gt는 greater than의 약자로, "보다 큰"을 의미합니다. - Projection (프로젝션)
{ name: 1, address: 1, age: 1 }는 반환될 데이터에서 name, address, age 필드만 반환하도록 지정합니다. 기본적으로 _id는 반환되지만, 필요 없으면 { _id: 0 }을 추가하여 제외할 수 있습니다. - Cursor Modifier (커서 수정자)
.limit(5)는 최대 5개의 문서만 반환하도록 결과를 제한하는 옵션입니다.
전체 MongoDB 쿼리
갱신 (Update)
MongoDB에서는 updateOne()과 updateMany()를 사용하여 문서를 수정할 수 있습니다.
- updateOne() : 조건에 맞는 첫 번째 문서를 수정합니다.
- updateMany() : 조건에 맞는 모든 문서를 수정합니다.
MongoDB 예시:
// 특정 문서 업데이트
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
// 여러 문서 업데이트
db.users.updateMany({ address: "서울" }, { $set: { address: "부산" } })
MySQL 예시 (비교):
-- 특정 레코드 업데이트
UPDATE users SET age = 31 WHERE name = 'Alice';
-- 조건에 맞는 여러 레코드 업데이트
UPDATE users SET address = '부산' WHERE address = '서울';
삭제 (Delete)
MongoDB에서 데이터를 삭제하는 방법은 deleteOne()과 deleteMany()입니다.
- deleteOne() : 조건에 맞는 첫 번째 문서를 삭제합니다.
- deleteMany() : 조건에 맞는 모든 문서를 삭제합니다.
MongoDB 예시:
// 특정 문서 삭제
db.users.deleteOne({ name: "Alice" })
// 조건에 맞는 여러 문서 삭제
db.users.deleteMany({ address: "부산" })
MySQL 예시 (비교):
-- 특정 레코드 삭제
DELETE FROM users WHERE name = 'Alice';
-- 조건에 맞는 여러 레코드 삭제
DELETE FROM users WHERE address = '부산';
🧪 실전 사례
예시 1: sports 컬렉션에 name: "Football"과 players: 11인 문서를 삽입
db.sports.insertOne({ name: "Football", players: 11 })
예시 2: products 컬렉션에서 price가 500 이하인 문서 조회
db.products.find({ price: { $lte: 500 } })
🧠 고급 팁 or 자주 하는 실수
- 컬렉션 스키마 : MongoDB는 스키마가 없지만, 데이터를 삽입할 때 일관성 있는 구조를 유지하는 것이 중요합니다. 이를 위해 애플리케이션 레벨에서 모델을 정의하거나, MongoDB의 Schema Validation을 활용할 수 있습니다.
- 인덱싱 : 자주 검색하는 필드에 대해 인덱스를 생성하면 성능이 향상됩니다. 인덱스가 없는 필드에 대해서는 쿼리 성능이 저하될 수 있습니다.
✅ 마무리 요약 및 복습 포인트
- MongoDB는 문서 기반 데이터베이스로, 컬렉션과 문서를 사용하여 데이터를 저장합니다.
- SQL과 비교하여 유연한 스키마를 제공하며, 비정형 데이터 처리에 강점을 지닙니다.
- MongoDB에서 기본적인 CRUD 작업을 수행할 때 사용하는 주요 메서드는 insertOne(), insertMany(), find(), updateOne(), deleteOne() 등입니다.
- 성능 최적화를 위해 인덱스를 적절히 사용하고, 데이터 일관성을 유지하기 위해 애플리케이션 레벨에서 관리하는 것이 중요합니다.
'Database' 카테고리의 다른 글
Chapter 8-45. NoSQL MongDB(5/6) MongoDB 비교문법 & 논리연산 (0) | 2025.03.27 |
---|---|
Chapter 8-44. NoSQL MongDB(4/6) 연습문제 (0) | 2025.03.27 |
Chapter 8-41. NoSQL MongoDB(2/6) MongoDB의 기본 구조 (0) | 2025.03.26 |
Chapter 8-41. NoSQL MongoDB(1/6) MongoDB,Studio 3T 설치 (MongoDB GUI Tool) (0) | 2025.03.26 |
Chapter 8-41. NoSQL MongoDB(1/6) (0) | 2025.03.26 |