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 해야 함
