설치
jupyter notebook에 설치 후 실습해보도록하자.
(https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/)
import sys
!{sys.executable} -m pip install pymongo
connect
아무것도 적지 않으면 로컬로 연결됩니다. 저는 몽고DB를 설치한 EC2에 연결해보았습니다. EIP를 붙인 EC2에 mongodb://[ip 주소], PORT를 적어주면 됩니다.
import pymongo
# mongoDB 연결
connection = pymongo.MongoClient('mongodb://3.34.9.105', 27017)
참고로 mongoose(JS 기반)를 사용 중이면 그냥
mongoose.connect("mongodb://localhost:27017", {config})...
로 설정해주면 된다.
db, 컬렉션 생성 후 데이터 삽입
# test라는 이름으로 db 생성 (db는 변수명일 뿐임)
db = connection.knowledge
# it라는 이름으로 컬렉션 생성
knowledge_it = db.it
# insert_one을 통해 컬렉션에 도큐먼트 추가
post = {"author": "Mike", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
knowledge_it.insert_one(post)
mongoose에서도 그랬었지만, mongoDB Shell과 비슷하면서도 다른 메서드를 사용한다.
또, 한가지 주의점은, mongo Shell에서는 insertOne을 할 때 key 값에 따옴표를 붙일 필요 없었지만
pymongo에서는 무조건 따옴표를 붙여야 한다. (안 그러면 변수를 쓸 수 없게 되니까. 당연한 사항이다.)
CRUD
C : insert_one, insert_many
R : find_one, find
U : update_one, update_many
D : delete_one, delete_many
위의 예시를 그대로 이어받아 pymongo에서의 CRUD 명령어를 알아보자.
insert_one(), insert_many()
output = knowledge_it.insert_one({"author": "Martin", "text": "Cinema is dead"})
# 여러 도큐먼트를 넣어줄 때는 []로 감싸줘서 리스트로 전달해야 함
knowledge_it.insert_many(
[
{"author": "Darren", "text": "Who are you?"},
{"author": "Trevor", "text": "Don't fuck with me"},
]
)
# 특정 명령에 변수를 할당하여 _id 확인 등 가능
output.inserted_id
# 해당 컬렉션에 몇개의 도큐먼트가 있는지 확인
knowledge_it.count_documents({})
find_one, find
# 첫번째 도큐먼트 가져오기
knowledge_it.find_one()
# 조건에 부합하는 도큐먼트 중 처음 발견되는 것 가져오기
martin = knowledge_it.find_one( {"author":"Martin"} )
# 해당 컬렉션의 모든 도큐먼트를 가져오기
docs = knowledge_it.find()
for doc in docs:
doc
# 특정 조건을 만족하는 모든 도큐먼트 가져오기
Trevor = knowledge_it.find({"author": "Trevor"})
for i in Trevor:
i
# 조건에 부합하는 도큐먼트의 갯수 확인하기
knowledge_it.count_documents({"author": "Trevor"})
# sort하여 가져오기. 값이 없으면 가장 낮은 것으로 인식함.
for post in knowledge_it.find().sort("age"):
post
update_one, update_many
주의할 점은 $set나 조건 또한 ""로 감싸줘야 한다는 것입니다.
# 조건에 만족하는 첫 도큐먼트를 update(변경)
knowledge_it.update_one({"author": "Darren"}, {"$set": {"text": 'Do not use drug. seriously.'}})
# 조건에 만족하는 모든 도큐먼트 변경
knowledge_it.update_many({"name": "david"}, {"$set": {"age": 355}})
delete_one, delete_many
# 조건에 맞는 도큐먼트 중 첫번째 발견되는 도큐먼트를 삭제합니다.
knowledge_it.delete_one({"name": "bob"})
# 조건에 맞는 모든 도큐먼트를 삭제합니다.
knowledge_it.delete_many({"age": { "$gt" : 30}})
'DB, ORM > 🍃mongoose, pymongo' 카테고리의 다른 글
검색을 빠르게 해주는 mongoDB 인덱스 (pymongo로 작업) (0) | 2020.06.09 |
---|---|
pymongo/mongoose 쿼리 작성하기 (0) | 2020.06.09 |
mongoose 미들웨어, Instance methods, Statics 사용하기 (0) | 2020.05.28 |
atlas 클러스터 생성 및 유저 생성 후 mongoose를 통한 연결 (0) | 2020.05.06 |
mongoose를 통해 express와 mongoDB 연동하기 (0) | 2020.03.27 |