프로그래밍 일기 — MongoDB
유용한 데이터 마법 도구 익히기
#MongoDB, #No-SQL, #find, #insert, #delete, #update, #반복문
어제까지 MongoDB라는 no-sql의 매우 유용한 마법도구에 대해서 배웠다. 그러나 기본 적인 동작과 설정만을 배웠을 뿐, 본격적으로 무언가를 아직 해보지 못했다. 따라서 이번에는 MongoDB를 이전에 진행한 웹 사이트 프로젝트와 연계하여 학습해 보는 것이 좋겠다는 판단이 들었다. 웹 상에서 출력할 데이터를 직접 DB에 저장하여 백엔드 처리를 하기 위해서다.
pymongo로 MongoDB를 가지고놀기
데이터 삽입(insert(), insert_one())
어제 pymongo
라는 라이브러를 통해 python상에서 MongoDB와 상호작용할 수 있다는 것을 배웠다. 이번에도 다시 pymongo
를 통해 데이터베이스에 데이터를 입력하는 연습을 해 볼 것이다. 아래는 이전에 활용한 MongoDB에 데이터를 넣는 예제를 조금 발전시킨 것이다. 여러개의 데이터를 한꺼번에 입력한다.
# pymong 라이브러리의 MongoClient 클래스 가져오기
from pymongo import MongoClient
# 클래스를 인스턴스화(MongoDB Client의 URL 주소 입력)
client = MongoClient("mongodb+srv://conanmoon:cmst9917@cluster0.vsoy9sp.mongodb.net/mydb?retryWrites=true&w=majority")
# 인스턴스의 db를 객체화
db = client.mydb
# db객체의 컬렉션을 인스턴스화
collection = db.users
# 컬렉션에 데이터 넣기
doc_1 = {
"name": "철수",
"age": 35
}
doc_2 = {
"name": "영희",
"age": 34
}
doc_3 = {
"name": "하늬",
"age": 32
}
doc_4 = {
"name": "두리",
"age": 40
}
collection.insert_one(doc_1)
collection.insert_one(doc_2)
collection.insert_one(doc_3)
collection.insert_one(doc_4)
데이터 검색(find(), find_one())
다음으로 입력된 데이터에서 원하는 데이터를 찾아본다. 바로 pymongo
의 .find()
메서드를 활용하는 것이다. 처음에는 존재하는 모든 데이터를 검색해본다. {‘_id’:False}
라는 부분은 _id
라는 필드를 보여주지 않는다는 것을 의미한다. 기본적으로 모든 MongoDB에 입력된 데이터는 이 필드를 가지게된다. 이 부분을 제외한 데이터의 다른 부분들을 보겠다는 의미이다. 아래 코드를 본래 예제에 추가한다. print()
를 활용하여 어떤데이터가 출력되는지 확인해본다.
#모든 데이터를 찾는다(.find()매서드 활용).
all_users = list(db.users.find({}, {'_id':False}))
print(all_users)
>>
[{'name': '철수', 'age': 35}, {'name': '영희', 'age': 34}, {'name': '하늬', 'age': 32}, {'name': '두리', 'age': 40}]
이번에는 모든 데이터를 반복문을 통해 출력해본다. 위 all_users
의 배열을 활용한다.
# 검색된 모든 유저의 이름과 나이를 반복문을 통해 출력한다.
for i in all_users:
print(i["name"], i["age"])
>>
철수 35
영희 34
하늬 32
두리 40
만약 데이터베이스의 가장 첫 데이터를 검색하고 싶다면,
pymongo
의.find_one()
메서드를 활용할 수 있다.
# 맨 첫 데이터를 검색하기
user = db.users.find_one({})
print(user)
>>
{'_id': ObjectId('64ae6ded241f476c4b09939b'), 'name': '철수', 'age': 35}
데이터 수정(update(), update_one())
데이터를 수정하고자할 때는 .update()
메서드를 활용할 수 있다. 변경할 데이터를 명기하고, 그 데이터의 어떤 부분을 변경할 것인지를 명기한다.
# 철수의 나이를 39살로 수정한다.
# 키 'name'의 값이 '철수'인 데이터의 'age'의 값을 39로 바꾼다.
db.users.update_one({'name':'철수'},{'$set':{'age':39}})
데이터 삭제(delete_one())
잘 쓰이지않지만, 데이터를 삭제하는 .delete_one()
메서드도 활용할 수 있다.
# 데이터를 삭제한다.
db.users.delete_one({'name':'두리'})
심화 예제
그렇다면 데이터베이스 상의 한 데이터를 가지고, 그 데이터와 같은 값을 갖는 다른 데이터를 찾아보자. “좋.댓.구"라는 영화와 같은 평점을 가진 영화의 제목들을 출력해본다.
# 참조 기준으로 삼을 데이터를 정의
example_data = db.users.find_one({"title": "좋.댓.구"})
# 기준 데이터를 활용하여 같은 값을 갖는 다른 데이터를 검색
compare_data = db.users.find({'rate': example_data["rate"]})
# 데이터의 제목만을 반복문을 통해 출력
for i in compare_data:
print(i["title"])
>>
좋.댓.구
극장판 도라에몽: 진구와 하늘의 유토피아
참조: