Chapter 8-43. NoSQL MongDB(3/6) 쿼리기초

2025. 3. 27. 13:35·Database

\

 

📌 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(): 반환할 문서 수를 제한

참고 설명

  1. Collection (컬렉션)
    db.users.find()는 MongoDB에서 users라는 컬렉션에서 데이터를 조회하라는 의미입니다.
  2. Query Criteria (쿼리 조건)
    { age: { $gt: 18 } }는 age가 18보다 큰 문서를 찾는 조건입니다. $gt는 greater than의 약자로, "보다 큰"을 의미합니다.
  3. Projection (프로젝션)
    { name: 1, address: 1, age: 1 }는 반환될 데이터에서 name, address, age 필드만 반환하도록 지정합니다. 기본적으로 _id는 반환되지만, 필요 없으면 { _id: 0 }을 추가하여 제외할 수 있습니다.
  4. 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
'Database' 카테고리의 다른 글
  • Chapter 8-45. NoSQL MongDB(5/6) MongoDB 비교문법 & 논리연산
  • Chapter 8-44. NoSQL MongDB(4/6) 연습문제
  • Chapter 8-41. NoSQL MongoDB(2/6) MongoDB의 기본 구조
  • Chapter 8-41. NoSQL MongoDB(1/6) MongoDB,Studio 3T 설치 (MongoDB GUI Tool)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (807)
      • Python (32)
      • 프로젝트 (116)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (42)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bts
    remittance
    urbantrends
    RM
    뷔
    travel ban
    life reflection
    lawsuitculture
    titaniumcase
    btsdischarge
    americanlaw
    gpterror
    btsjungkook
    college reunions
    chinanightlife
    newpoliticalparty
    americaparty
    chatgpterror
    self-growth
    global politics
    youngprofessionals
    classaction
    smartphonedurability
    basalcellcarcinoma
    hotcoffeecase
    homebartrend
    trumpmuskclash
    btscomeback
    livebroadcast
    btsreunion
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 8-43. NoSQL MongDB(3/6) 쿼리기초
상단으로

티스토리툴바