BE
[MongoDB] MongoDB 핵심 개념부터 쿼리까지 정리
| 서론
안녕하세요, 팡일입니다.
MongoDB는 프론트엔드 개발을 하다 보면 백엔드나 데이터 구조를 이해하기 위해 한 번쯤은 반드시 접하게 되는 데이터베이스입니다.
특히 JSON 기반 구조를 사용하기 때문에 React와 같은 프론트엔드 환경과도 잘 어울리는 특징을 가지고 있습니다.
이번 글에서는 MongoDB의 자주 사용하는 쿼리, 그리고 인덱스까지 실제로 개발에서 바로 활용할 수 있는 수준으로 한 번에 정리해보려고 합니다.
| 쿼리 언어
MongoDB는 JSON 기반의 쿼리 문법을 사용하며, 다양한 연산자를 통해 데이터를 조회하고 조작할 수 있습니다.
1) 비교 연산자
: 값을 기준으로 Document를 조회할 때 사용하는 연산자입니다.
// $eq
db.users.find({ age: { $eq: 30 } })
// 'age'가 30인 Document 조회
// $ne
db.users.find({ age: { $ne: 30 } })
// 'age'가 30이 아닌 Document 조회
// $gt
db.users.find({ age: { $gt: 30 } })
// 'age'가 30보다 큰 Document 조회
// $gte
db.users.find({ age: { $gte: 30 } })
// 'age'가 30 이상인 Document 조회
// $lt
db.users.find({ age: { $lt: 30 } })
// 'age'가 30보다 작은 Document 조회
// $lte
db.users.find({ age: { $lte: 30 } })
// 'age'가 30 이하인 Document 조회2) 검색 연산자
: 여러 값 중 특정 값과 일치하는 데이터를 찾을 때 사용합니다.
// $in
db.users.find({ age: { $in: [25, 30, 35] } })
// 특정 값 중 하나와 일치하는 Document 조회
// $nin
db.users.find({ age: { $nin: [25, 30, 35] } })
// 특정 값들과 모두 일치하지 않는 Document 조회3) 논리 연산자
: 여러 조건을 조합하여 데이터를 조회할 때 사용합니다.
// $and
db.users.find({
$and: [{ age: { $gt: 30 } }, { gender: "male" }]
})
// $or
db.users.find({
$or: [{ age: { $lt: 20 } }, { age: { $gt: 30 } }]
})
// $not
db.users.find({
age: { $not: { $gt: 30 } }
})4) 특정 필드 검색
: 특정 필드의 존재 여부를 기준으로 Document를 조회할 수 있습니다.
// $exists
db.users.find({ address: { $exists: true } })
// 특정 필드가 존재하는 Document 조회5) 정규 표현식 검색
: 문자열 패턴을 기반으로 데이터를 검색할 수 있습니다.
// $regex
db.users.find({ name: { $regex: /^a/i } })
// 'a'로 시작하는 이름 검색 (대소문자 구분 없음)6) Document 조작
: 데이터를 수정하거나 변경할 때 사용하는 연산자입니다.
// $set
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 28 } }
)
// $unset
db.users.updateOne(
{ name: "Alice" },
{ $unset: { address: "" } }
)
// $inc
db.users.updateOne(
{ name: "Alice" },
{ $inc: { age: 1 } }
)7) 배열 조작
: 배열 형태의 데이터를 다룰 때 사용합니다.
// $push
db.users.updateOne(
{ name: "Alice" },
{ $push: { hobbies: "swimming" } }
)
// $pull
db.users.updateOne(
{ name: "Alice" },
{ $pull: { hobbies: "swimming" } }
)| 인덱스
인덱스는 데이터 조회 성능을 크게 좌우하는 요소로, 쿼리 패턴에 맞게 설계하는 것이 중요합니다.
1) 단일 필드 인덱스
: 하나의 필드를 기준으로 검색할 때 사용됩니다.
db.users.createIndex({ age: 1 })
db.users.find({ age: { $gt: 30 } })2) 복합 인덱스
: 여러 필드를 기준으로 검색할 때 사용됩니다.
db.users.createIndex({ age: 1, name: 1 })
db.users.find({ age: 30, name: "Kim" })
db.users.find({ age: 30 }) // prefix 활용 가능복합 인덱스는 앞쪽 필드부터 사용되는 prefix 특성을 가집니다.
3) 텍스트 인덱스
: 문자열 검색에 최적화된 인덱스입니다.
db.posts.createIndex({ content: "text" })
db.posts.find({ $text: { $search: "mongodb" } })| MongoDB 설치 및 실행 (Mac 기준)
MongoDB는 Homebrew를 통해 간단하게 설치할 수 있습니다.
1) 설치
brew tap mongodb/brew
brew update
brew install mongodb-community2) 서버 실행
brew services start mongodb-community
brew services list
3) Mongo Shell 실행
mongosh
| DB 기본 명령어
MongoDB에서 자주 사용하는 기본 명령어입니다.
show dbs // DB 목록 조회
db // 현재 DB 확인
use DB명 // DB 선택 (없으면 생성 준비)1) 데이터 삽입
// 단일 데이터
db.users.insertOne({ name: "pangil" })
// 여러 데이터
db.users.insertMany([{ name: "kim" }, { name: "lee" }])2) DB 삭제
db.dropDatabase()| 결론
MongoDB는 Document 기반 구조를 통해 유연한 데이터 모델링이 가능하며, 다양한 연산자와 인덱스를 활용하여 효율적인 데이터 조회와 처리를 수행할 수 있는 데이터베이스입니다.
특히 프론트엔드 개발 관점에서 JSON 기반 데이터 구조, 빠른 프로토타이핑, 유연한 스키마 설계 등 이러한 장점 덕분에 초기 서비스 개발이나 실험적인 프로젝트에서 매우 강력한 선택지가 될 수 있습니다.
기본 개념과 쿼리 문법을 한 번 익혀두면, 단순한 데이터 저장을 넘어 실제 서비스에서 활용 가능한 수준까지 빠르게 확장할 수 있습니다.