database_(NoSQL (MongoDB) + Python (PyMongo))

김현희·2026년 4월 23일

colab에서 pymongo를 사용하기 위한 세팅


⭐️ from pymongo import MongoClient 필수


1. 컬렉션 사용 준비

sample_mflix 데이터베이스의 movies 컬렉션은 이미 준비됨.

삽입, 업데이트, 삭제와 같은 연습을 위해 temp_movies라는 임시 컬렉션을 생성하여 사용할 예정이며, 컬렉션은 첫 도큐먼트가 삽입될 때 자동으로 생성됨.

  • 컬렉션을 만드는 것은 SQL에서 테이블을 만드는 것과 동일

💡컬렉션을 가리키는 객체를 가져오는 것:
db.create_collection("temp_movies")

movies.count_documents({})
: 0보다 크다 ➡️ 컬렉션 생성 + 데이터 삽입 완료
: 0이다 ➡️ 아직 생성 안 됐거나 비어 있음
: 간접적으로 컬렉션이 생성됐을을 확인할 수 있음.

2. 도큐먼트 삽입

2-1. insert_one(): 단일 도큐먼트 삽입

1️⃣ 데이터를 넣을 컬렉션 선택하기
2️⃣ 컬렉션이름.insert_one('넣을 데이터 이름')
💡 출력된 InsertOneResult(ObjectId('69e9e1be8ee62d8ad58ee660'), acknowledged=True) : 오브젝트 각각의 고유 아이디 느낌

2-2. insert_many(): 여러 도큐먼트 삽입

  • 여러 도큐먼트를 리스트 형태로 한 번에 삽입
  • 삽입된 모든 도큐먼트의 _id 리스트를 반환받을 수 있음

3.데이터 조회

3-2. find_one()

  • find_one(): 조건에 맞는 첫 번째 도큐먼트 조회
  • 주어진 조건과 일치하는 첫 번째 도큐먼트를 반환
  • 조건이 없으면 컬렉션의 첫 번째 도큐먼트를 반환

  • 💡 pd.DataFrame()은 기본적으로 "여러 개의 레코드(행)"를 다루는 도구로 리스트 형태로 정보가 입력될 것이라는 가정(+)
  • 하나의 행일 때는 리스트라는 것을 명시하기 위해 []를 사용
  • ⭐️딕셔너리 형태!!

3-2. find()

  • 조건에 맞는 모든 도큐먼트 조회
  • find({})처럼 안에 아무것도 안쓰면 모든 데이터가 출력됨.



4. Projection (프로젝션)

  • find() 또는 find_one() 메서드 사용 시 결과 도큐먼트에서 원하는 필드만 선택하여 가져오는 기능 즉, 출력할 필드를 제한하는 것
  • 두 번째 인자로 딕셔너리를 전달하여 필드를 포함하거나 제외할 수 있음

  • _id는 항상 출력됨
    ‼️제외하려면 _id: 0으로 설정하면 됨.


5. sort() & limit()

  • sort(): 결과 정렬 ➡️ 1: 오름차순 / -1: 내림차순
  • limit(): 결과 개수 제한

6.도큐먼트 업데이트

6-1. update_one(): 단일 도큐먼트 업데이트

  • 주어진 조건과 일치하는 첫 번째 도큐먼트를 업데이트
  • $set 연산자를 사용하여 필드를 설정할 수 있습니다.
  • n: 매칭되는 값 1개
  • nModified : 최종적으로 수정된 값의 갯수

  • result.matched_count
  • result.modified_count

6-2. update_many(): 여러 도큐먼트 업데이트


7. 삭제

7-1. 도큐먼트 삭제 delete_one()

  • 주어진 조건과 일치하는 첫 번째 도큐먼트를 삭제

7-2. 컬렉션 삭제 drop()


8. Aggregation

Aggregation Pipeline
* 여러 단계(stage)를 순차적으로 거치면서 데이터를 변환하고 분석하는 MongoDB의 강력한 기능

  • SQL의 GROUP BY, HAVING, ORDER BY, 데이터 전처리 기능을 합친 것과 비슷

8-1. $match

조건에 맞는 도큐먼트만 다음 단계로 전달함
SQL의 WHERE 절과 비슷하며, 필터링 시 가장 먼저 사용하는 단계

  • $eq : 같다 (=)
  • $gte: 크거나 같다 (>=)
  • $lte: 작거나 같다 (<=)
  • $gt : 크다 (>)
  • $lt : 작다 (<)
  • $ne : 같지 않다 (!=)
  • $in : 여러 값 중 일치하는 것 조회
  • $nin : 배열 안에 없는 경우

8-2. 논리 연산자

  • $and, $or, $not
  • $nor: 들어 있는 조건을 모두 만족하지 않을 때

8-3. $group

  • SQL의 GROUP BY처럼 데이터를 특정 기준으로 묶어 집계(Aggregation)를 수행
  • MongoDB에서는 그룹 기준이 _id 필드이며, 계산된 필드를 새로운 key로 추가할 수 있음
  • $sum : 합계 (count 용도로도 사용)
  • $avg : 평균
  • $min : 최소값
  • $max : 최대값

$year, $imbd.rating는 왜 이렇게 쓰는 걸까? 🤔

  • $"이것은 단순한 문자열이 아니라, 문서 내에 있는 '필드(Field)'의 값을 가져오라는 특수 기호"
    ➡️ _
    $year나 $imdb.rating_처럼 앞에 $를 붙이는 이유는 MongoDB에게 --> "거기 'year'라는 글자를 쓰지 말고, 각 문서 안에 들어있는 year 필드의 실제 값을 꺼내서 계산에 써줘!**"라고 명령하는 것
    ➡️ 만약 $를 붙이지 않고 그냥 "year"라고 쓰면, MongoDB는 연도(예: 2024)를 가져오는 게 아니라 그냥 "year"라는 단어 그 자체를 데이터로 인식

‼️ $는 두 가지 용도

구분예시역할
연산자$group, $avg, $sort명령어 ➡️"그룹화해라", "평균 내라" 같은 기능을 수행
필드참조$year, $imdb.rating데이터 경로 ➡️ "해당 필드의 값을 읽어와라"는 뜻

8-4. $project

  • SQL의 SELECT처럼 원하는 필드만 반환하거나 새 필드를 계산
  • 기능: 필드 포함/제외 (1: 포함, 0: 제외), 필드 이름 변경, 새로운 계산 필드 생성(산술 연산 가능), 중첩된 필드 접근 (ex. imdb.rating)
  • ‼️ _id는 기본적으로 항상 포함되므로 제외하려면 _id: 0 해야 함
profile
AI 헬스케어 공부하는 간호사

0개의 댓글