1. MongoDB란
- NoSQL 데이터베이스 시스템 중 하나로, 문서 지향 데이터베이스
- 관계형 데이터베이스와는 다르게 데이터를 테이블이 아니라 JSON 스타일의 BSON(Binary JSON)형식의 문서로 저장
- 개발자가 유연하게 데이터를 저장하고 쿼리할 수 있도록 목적으로 만들어짐.
1-1. 문서 지향 데이터베이스
데이터를 BSON형식의 문서로 저장. 이 문서는 키-값 쌍으로 이루어져 있으며, 여러 종류의 데이터 유형을 포함할 수 있다.
1-2. 스키마가 없다.
관계형 데이터베이스와 달리 MongoDB는 데이터베이스의 스키마를 명시적으로 정의하지 않는다.
동적인 스키마를 사용하여 데이터 모델을 유연하게 변경할 수 있도록 했다.
{"no":1, "userid":"apple", "userpw":"1111"}
{"no":2, "userid":"banana", "userpw":"2222", email."banana@banana.com}
{"name":오렌지, "hp":"010-1111-1111"}
2. 요청 본문(Body)
클라이언트가 서버에 데이터를 보낼 때, 그 데이터는 body에 담겨온다.
2-1. 요청 JSON
{
"text": "점심 메뉴 정해줘"
}
2-2. 서버에서는 req.body로 읽음
Express에서 JSON body를 읽으려면 app.use(express.json()) 미들웨어를 등록해야한다.
2-3. MongoDB를 불러옴
npm i mongodb 설치
const { MongoClient } = require("mongodb")
2-4. MongoDB 연결 준비
url = "mongodb://127.0.0.1:27017..."
const client = new MongoClient(url)
3. 데이터 조회 및 수정
3-1. GET으로 데이터 조회
http://127.0.0.1:3000/memos
- postman 없어도 브라우저를 통해 확인 가능
http://127.0.0.1:3000/memos?keyword=공부
- req.query.keyword로 읽을 수 있음
http://127.0.0.1:3000/memos/:id
- 서버에서는 URL 파라미터를 req.params.id로 읽음
3-2. PUT/ PATCH로 데이터 수정
PUT
- 서버에 이미 존재하는 자원을 전체적으로 수정하거나 특정 자원을 새로 생성할 때 사용하는 방식
- 클라이언트는 수정할 데이터 전체를 요청 본문에 담아 서버로 전달하며, 서버는 해당 자원을 전달받은 데이터로 완전히 교체하는 방식으로 업데이트를 한다.
PATCH
- 서버에 존재하는 자원의 일부 데이터만 부분적으로 수정할 때 사용하는 방식
- 클라이언트는 수정이 필요한 필드만 요청 본문에 담아 서버로 전달하며, 서버는 해당 자원의 특정 부분만 업데이트
4. MongoDB playground
// 데이터베이스 선택 및 생성
use("AIdb")
// db: AIdb
// students: 컬렉션 (컬렉션이 없다면 생성하면서 삽입)
// insertOne: 문서를 1개 넣는 메서드
db.students.insertOne({
userid: "apple",
name: "김사과",
age: 20,
major: "AI",
score: 88
})
// insertMany(): 여러 문서를 한 번에 넣음
use("AIdb")
db.students.insertMany([
{ name: "김사과", age: 20, major: "AI", score: 88 },
{ name: "반하나", age: 25, major: "Backend", score: 91 },
{ name: "오렌지", age: 30, major: "Frontend", score: 77 }
])
// 전체 조회
// find(): 문서를 조회하는 기본 메서드
// {}: 조건이 없다는 뜻
use("AIdb")
db.students.find({})
/*
ObjectId
- 각 문서의 12바이트(24자리 16진수) 고유한 ID로 사용되는 데이터 타입
- SQL의 기본키와 비슷한 역할을 함
- 각 문서에 _id 필드를 기본적으로 생성하며, 특별히 지정하지 않으면 자동으로 ObjectId 형태로 생성
*/
/*
$eq 같다
$ne 같지 않다
$gt 크다
$gte 크거나 같다
$lt 작다
$lte 작거나 같다
*/
// 이름이 김사과인 조회 조회
use("AIdb")
db.students.find({ name: "김사과" })
// 점수가 80점 이상인 학생 조회
use("AIdb")
db.students.find({ score: { $gte: 80 } })
// 나이가 23 초과인 학생 조회
use("AIdb")
db.students.find({ age: { $gt: 23 } })
// 원하는 필드만 조회
use("AIdb")
db.students.find({}, { name: 1, score: 1, _id: 0 })
// 1개만 조회
use("AIdb")
db.students.find({})
use("AIdb")
db.students.findOne({ name: "김사과" })
// 점수 정렬
use("AIdb")
db.students.find({}).sort({ score: 1 }) // 1: 오름차순
use("AIdb")
db.students.find({}).sort({ score: -1 }) // -1: 내림차순
// 개수 세기
use("AIdb")
db.students.countDocuments({})
//특정 조건을 만족하는 학생 수
use("AIdb")
db.students.countDocuments({ score: { $gte: 80 } })
// 1개 수정
// 첫 번째 객체: 누구를 수정할지 조건
// 두 번째 객체: 무엇을 어떻게 바꿀지 조건
use("AIdb")
db.students.updateOne(
{ name: "김사과" },
{ $set: { score: 95 } }
)
// 여러 데이터 수정
use("AIdb")
db.students.updateMany(
{ major: "AI" },
{ $set: { major: "Artificial Intelligence" } }
)
// 숫자 증가시키기
use("AIdb")
db.students.updateMany(
{}, { $inc: { score: 3 } }
)
// 문서 삭제 (한개)
use("AIdb")
db.students.deleteOne({ name: "오렌지" })
// 여러 문서 삭제
use("AIdb")
db.students.deleteMany({ score: { $lt: 100 } })'BACK-END' 카테고리의 다른 글
| [Node.js] Node.js 기초 2 (0) | 2026.07.17 |
|---|---|
| [Node.js] Node.js 기초 1 (0) | 2026.06.28 |
| [MySQL] MySQL 연동 (0) | 2026.06.09 |
| [MySQL] 뷰 (view) (0) | 2026.06.09 |
| [MySQL] MySQL 함수 (0) | 2026.06.09 |