파이썬 몽고디비(python & MongoDB)

Apic·2025년 5월 26일
0

코딩

목록 보기
25/25
post-thumbnail

환경

OS: Ubuntu 24.04
MongdoDB: 8.0.9
Mongosh: 2.5.1

MongoDB 설치

https://www.mongodb.com/ko-kr/docs/manual/tutorial/install-mongodb-on-ubuntu/

gnupg & curl 설치

sudo apt-get install gnupg curl

공개 GPG키 가져오기

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
   --dearmor

목록 파일 만들기

# Ubuntu 24.04 (Nobble)
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

# Ubuntu 20.04 (Jammy)
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

# Ubuntu 20.04 (Focal)
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

패키지 리로드

sudo apt-get update

MongoDB Community 설치

# latest version
sudo apt-get install -y mongodb-org

# specific version
sudo apt-get install -y \
   mongodb-org=8.0.9 \
   mongodb-org-database=8.0.9 \
   mongodb-org-server=8.0.9 \
   mongodb-mongosh \
   mongodb-org-shell=8.0.9 \
   mongodb-org-mongos=8.0.9 \
   mongodb-org-tools=8.0.9 \
   mongodb-org-database-tools-extra=8.0.9

실행

# mongodb 시작
sudo systemctl start mongod

# 시작되었는지 확인
sudo systemctl status mongod

몽고db 실행
mongosh

파이썬 연결

pymongo 설치

# uv
uv add pymongo
# pip
pip install pymongo

데이터베이스 목록

client = MongoClient(host='localhost', port=27017)    
# 데이터베이스 목록
print(client.list_database_names())
['admin', 'config', 'local']

데이터베이스 접근

# 데이터베이스 접근
db = client['mydb']
print(db)
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mydb')

Collection 접근

collection = db['myCol']
print(collection)
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mydb'), 'myCol')

Documents 생성

import datetime
worker = {"name": "홍길동",
            "work_time": 10,
            "pay_time": 10000,
            "work_days": ['월요일', '화요일', '수요일', '목요일', '금요일'],
            "date": datetime.datetime.now()
            }
print(worker)
{'name': '홍길동', 'work_time': 10, 'pay_time': 10000, 'work_days': ['월요일', '화요일', '수요일', '목요일', '금요일'], 'date': datetime.datetime(2025, 5, 26, 22, 50, 20, 483301)}

Collection 접근 및 Document 추가

# Collection 접근 - 'workers' Collection
workers = db.workers

# Document 추가 - insert_one() 메서드 이용
worker_id = workers.insert_one(worker).inserted_id
print(worker_id)
68347230cda61368e4f44282

단일 Document 보기

print(workers.find_one())
{'_id': ObjectId('68350790521ae63bdc873181'), 
'name': '홍길동', 
'work_time': 10, 
'pay_time': 10000, 
'work_days': ['월요일', '화요일', '수요일', '목요일', '금요일'], 
'date': datetime.datetime(2025, 5, 27, 9, 30, 8, 199000)}

데이터 여러개 추가 & 단일 Document 보기

workers_info = []
workers_info.append({"name": "홍길동",
            "work_time": 10,
            "pay_time": 10000,
            "work_days": ['월요일', '화요일', '수요일', '목요일', '금요일'],
            "date": datetime.datetime.now()
            })

workers_info.append({"name": "김철수",
            "work_time": 20,
            "pay_time": 20000,
            "work_days": ['월요일', '화요일', '수요일', '토요일'],
            "date": datetime.datetime.now()
            })

workers_info.append({"name": "김영희",
            "work_time": 30,
            "pay_time": 30000,
            "work_days": ['월요일', '화요일', '토요일', '일요일'],
            "date": datetime.datetime.now()
            })

workers = db.workers
workers.insert_many(workers_info)

workers.find_one()

find_one()은 조건을 주지 않으면 첫 번째 데이터가 나오는 듯 하다.

{'_id': ObjectId('68350790521ae63bdc873181'),
 'name': '홍길동',
 'work_time': 10,
 'pay_time': 10000,
 'work_days': ['월요일', '화요일', '수요일', '목요일', '금요일'],
 'date': datetime.datetime(2025, 5, 27, 9, 30, 8, 199000)}

조건으로 찾기

workers.find_one({'name': '김영희'})
{'_id': ObjectId('683509e6200b18b56744b234'),
 'name': '김영희',
 'work_time': 30,
 'pay_time': 30000,
 'work_days': ['월요일', '화요일', '토요일', '일요일'],
 'date': datetime.datetime(2025, 5, 27, 9, 40, 6, 607000)}

데이터 전체 보기

mysql에서는 select * from table;인것 같다.

for i in workers.find():
    print(i)
{'_id': ObjectId('68350b27200b18b56744b235'), 'name': '홍길동', 'work_time': 10, 'pay_time': 10000, 'work_days': ['월요일', '화요일', '수요일', '목요일', '금요일'], 'date': datetime.datetime(2025, 5, 27, 9, 45, 27, 345000)}
{'_id': ObjectId('68350b27200b18b56744b236'), 'name': '김철수', 'work_time': 20, 'pay_time': 20000, 'work_days': ['월요일', '화요일', '수요일', '토요일'], 'date': datetime.datetime(2025, 5, 27, 9, 45, 27, 345000)}
{'_id': ObjectId('68350b27200b18b56744b237'), 'name': '김영희', 'work_time': 30, 'pay_time': 30000, 'work_days': ['월요일', '화요일', '토요일', '일요일'], 'date': datetime.datetime(2025, 5, 27, 9, 45, 27, 345000)}

ref

https://wooiljeong.github.io/python/mongodb-01/
https://www.mongodb.com/ko-kr/docs/manual/tutorial/install-mongodb-on-ubuntu/

profile
코딩 공부하는 사람

0개의 댓글