오늘은 python에서 pymongo 라이브러리로 MongoDB에 데이터를 CRUD하는 방법을 살펴보도록 하겠습니다.
pymongo MongoDB CRUD 튜토리얼
pymongo 주요 메서드 정리
1. 한 개 문서 삽입: collection.insert_one()
2. 여러 개 문서 삽입: collection.insert_many()
3. 한 개 문서 조회: collection.find_one()
4. 여러 개 문서 조회: collection.find()
5. 한개 문서 수정: collection.update_one()
6. 여러 개 문서 수정: collection.update_many()
7. 한개 문서 삭제: collection.delete_one()
8. 여러 개 문서 삭제: collection.delete_many()
9. collection 삭제: collection.drop()
10. 문서 수 카운트: collection.count_documents()
아래 코드에 어떻게 mongodb에 접속하여 collection을 생성하고, 데이터를 어떻게 삽입하고, 조회하고, 수정하고, 삭제하고, collection을 삭제하는지에 대한 예제 코드들을 정리해놓았습니다. pymongo 공식문서[1]를 참고하여 만든 예제이므로 신뢰하실만할 것입니다.
import pymongo
from datetime import datetime
client = pymongo.MongoClient('mongodb://root:root@localhost:27017/test_db?authSource=admin')
db = client.test_db
collection = db.test_collection
data1 = {
"name": "박명수",
"age": 19,
"birthday": datetime(1998, 3, 11),
"nicknames": ['벼멸구', '2인자', '거성']
}
data2 = {
"name": "정준하",
"age": 18,
"birthday": datetime(1999, 6, 27),
"nicknames": ['정중앙', '쩌리짱', '정총무']
}
data34 = [
{
"name": "유재석",
"age": 17,
"birthday": datetime(2000, 5, 23),
"nicknames": ['메뚜기', '요다', '유부장']
},
{
"name": "정형돈",
"age": 16,
"birthday": datetime(2001, 4, 30),
"nicknames": ['미존개오', '4대천왕', '뚱보']
}
]
data56 = [
{
"name": "하하",
"age": 19,
"birthday": datetime(1997, 1, 1),
"nicknames": ['꼬마', '하사원']
},
{
"name": "길",
"age": 23,
"birthday": datetime(1995, 9, 7),
"nicknames": ['길인턴', '해양생물']
}
]
collection.insert_one(data1) # 한 개 문서 삽입
collection.insert_one(data2)
collection.insert_many(data34) # 여러 문서 삽입
collection.insert_many(data56)
print("\n\n한 개 문서 조회")
print(collection.find_one())
print("\n\n조건이 맞는 한 개 문서 조회")
print(collection.find_one({'name': '정형돈'}))
print("\n\n모든 문서 조회")
results = collection.find()
# find()는 cursor 객체를 반환. 모든 매칭되는 문서를 이터레이트할 수 있도록 해줌.
for result in results:
print(result)
print("\n\n3개 문서 조회")
results = collection.find().limit(3)
for result in results:
print(result)
print("\n\n조건이 맞는 모든 문서 조회")
results = collection.find({'age': 19})
for result in results:
print(result)
print("\n\n2000년 1월 1일 미만 출생자 조회. 생일 기준 오름차순 정렬")
results = collection.find({'birthday': {"$lt": datetime(2000, 1, 1)}}).sort("birthday")
# $lt: less than
# https://www.mongodb.com/docs/manual/reference/operator/query/
for result in results:
print(result)
print("\n\n2000년 1월 1일 이후 출생자 조회. 이름 기준 내림차순 정렬")
results = collection.find({'birthday': {"$gte": datetime(2000, 1, 1)}}).sort("name", pymongo.DESCENDING)
# $gte: greater than or equal
# https://pymongo.readthedocs.io/en/stable/api/pymongo/cursor.html#pymongo.cursor.Cursor.sort
for result in results:
print(result)
print("\n\n나이로 내림차순 정렬 후 이름으로 오름차순 정렬")
results = collection.find().sort([("age", pymongo.DESCENDING), ("name", pymongo.ASCENDING)])
for result in results:
print(result)
print("\n\n17세 이상 19세 이하 조회.")
results = collection.find({"age": {"$gte": 17, "$lte": 19}})
for result in results:
print(result)
print("\n\n전체 문서 수 카운트.")
print(collection.count_documents({}))
print("\n\n19세인 사람수 카운트.")
print(collection.count_documents({"age": 19}))
print("\n\n이름 하하인 문서의 이름 하하하로 수정")
collection.update_one({'name':'하하'}, {"$set": {'name': '하하하'}})
print("\n\n나이가 19인 문서들 나이 91로 수정")
collection.update_many({'age':19}, {"$set": {'age': 91}})
print("\n\n이름이 노홍철인 문서 이름 노홍칠로 수정. 없다면 문서 삽입.")
collection.update_one({'name':'노홍철'}, {"$set": {'name': '노홍칠'}}, upsert=True)
# upsert = update or insert
print("\n\n이름이 길인 문서 삭제")
collection.delete_one({'name':'길'})
print("\n\n나이가 91세인 문서들 삭제")
collection.delete_many({'age':91})
print("\n\n모든 문서 삭제")
collection.delete_many({})
print("\n\ncollection 삭제")
collection.drop()
참고자료
'DB > MongoDB' 카테고리의 다른 글
[pymongo] MongoDB database, collection 목록 확인 방법 (0) | 2023.01.20 |
---|---|
[pymongo] MongoDB collection 인덱스 조회 및 삭제 방법 (0) | 2023.01.20 |
[MongoDB] 파이썬 beanie CRUD 튜토리얼 (0) | 2022.12.26 |
[MongoDB] document 삭제, collection 삭제 명령어 (0) | 2022.12.26 |