::: IT인터넷 :::

Python으로 MongoDB 사용하기 (pymongo)

곰탱이푸우 2022. 8. 18. 08:20
Python을 이용하여 MongoDB를 사용하는 방법에 대해 알아본다.
 
MongoDB의 mongosh에서 Database, Collection, Documnet를 사용하는 방법은 다음 포스팅을 참고한다.
Docker를 사용하여 MongoDB를 설정하는 방법은 다음 포스팅을 참고한다.
그러나 매번 수작업으로 CRUD (Create, Read, Update, Delete)를 할 수 없다.
결국 프로그래밍으로 해결해야 한다. 편의상 파이썬을 중심으로 진행한다.
 
pymongo에서 제공하는 기능들에 대한 간단한 사용법에 대해 살펴본다.
 
 

PyMongo 소개

Python에서 MongoDB를 사용하기 위해서는 pymongo 라이브러리를 사용한다.
 
해당 라이브러리의 공식 사이트와 GitHub은 다음과 같다.
 
2022년 5월 9일 현재 최신 버전은 4.1.1이고 Apache-2.0 라이선스를 따른다.
Apache-2.0 라이선스는 소스 코드 공개를 요구하지 않는 라이선스이기 때문에 부담 없이 사용 가능하다.
pymongo의 코드를 직접 수정하지 않는 이상 사용에 문제는 없다.
직접 수정하여 배포하는 경우 Apache 라이선스를 의무적으로 명시해야 한다.
 
Apache-2.0에 대한 자세한 내용은 아래 블로그를 참고한다.
pymongo는 MongoDB를 파이썬으로 사용하기 위해 널리 쓰이는 라이브러리 중 하나이다.
JDBC와 같은 Database 커넥터이기 때문에 다음과 같은 기능을 제공한다.
  • MongoDB 연결과 해제
  • 데이터 입출력과 조작
  • 결과 반환
 
기본적인 사용법은 아래 기술 문서를 참고한다.
 

PyMongo 설치

아래 명령을 사용하면 pymongo를 설치할 수 있다.
$ pip install pymongo
 
pip 환경 설정은 아래 포스팅의 pip 클라이언트 설정 부분을 참고한다.
아나콘다를 이용하여 개발을 위한 가상 환경을 사용하고자 하는 경우 아래 포스팅을 참고한다.
PyMongo도 PostgreSQL의 psycopg2와 같이 래핑 (Wrapping)해서 사용할 것이다.
라이브러리의 변경 사항에 유연하게 대처할 수 있기 때문이다.
 
외부 라이브러리를 래핑 (Wrapping)하는 이유는 아래 문서를 참고한다.
 

PyMongo 사용하기

pymongo 라이브러리에서 제공하는 함수들을 사용하는 방법이다.
해당 함수들은 CRUD 클래스로 래핑 (Wrapping)할 때 사용한다.
 
사용하기 전에 코드 상단에 해당 라이브러리를 사용할 것으로 정의해야 한다.
import pymongo
 
파이썬 코드 상에서 pymongo의 버전을 확인하는 방법은 다음과 같다.
# pymongo 버전 확인
print(pymongo.__version__)    # 4.1.1
 
pip로 설치 된 패키지 목록에서 확인하는 방법은 다음과 같다.
$ pip list | grep pymongo
pymongo                        4.1.1
 
MongoDB 연결

 

MongoDB과 연결하기 위해서는 pymongo의 MongoClient 클래스로 인스턴스를 생성해야 한다.
연결할 MongoDB의 주소, 포트, 계정과 비밀번호를 전달해야 한다.
 
MongoClient 클래스는 다음과 같이 정의 되어 있다.
class pymongo.mongo_client.MongoClient(
    host='localhost', port=27017,
    document_class=dict, tz_aware=False, connect=True,
    **kwargs)
 
대표적인 옵션은 다음과 같다.
구분
기본값
Optional
내용
host
localhost
O
MongoDB의 호스트 이름, IP 주소, Unix 소켓 경로 등
port
27017
O
MongoDB의 포트 번호
username
 
X
MongoDB에 연결할 계정
password
 
X
MongoDB에 연결할 비밀번호
document_class
dict
O
클라이언트의 쿼리에 반환 된 Document의 데이터 타입
tz_aware
False
O
MongoDB 클라이언트의 로컬 시간대 사용 여부
connect
True
O
백그라운드에서 MongoDB 연결 유지 여부

 

그 외에도 옵션이 너무 많기 때문에, 자세한 사항은 아래 기술 문서를 참고한다.
다음과 같이 사용한다.
# 기본값 사용
conn_default = pymongo.MongoClient()

print(conn_default)
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True)

# 옵션 전달
conn = pymongo.MongoClient(host="localhost", port=27017, user="mongo", password="mongo")

print(conn)
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True)
 
Database 목록 조회
연결한 MongoDB 내부에 존재하는 Database의 목록을 가져온다.
 
MongoClient 인스턴스의 list_databases 메소드를 사용한다.
해당 메소드는 다음과 같이 정의 되어 있다.
list_databases(session: Optional[pymongo.client_session.ClientSession] = None,
    comment: Optional[Any] = None,
    **kwargs: Any)
    → pymongo.command_cursor.CommandCursor[Dict[str, Any]]
 
MongoDB는 내부에 여러 개의 Database가 존재하기 때문에, 해당 함수를 호출하면 리스트 타입으로 반환한다.
다음과 같이 사용한다.
for item in conn.list_databases():
    print(item)

{'name': 'admin', 'sizeOnDisk': 212992, 'empty': False}
{'name': 'config', 'sizeOnDisk': 36864, 'empty': False}
{'name': 'dbtest', 'sizeOnDisk': 131072, 'empty': False}
{'name': 'local', 'sizeOnDisk': 81920, 'empty': False}
{'name': 'test', 'sizeOnDisk': 81920, 'empty': False}
{'name': 'testtest', 'sizeOnDisk': 114688, 'empty': False}
 
자세한 사항은 아래 기술 문서를 참고한다.
Database 연결
연결한 MongoDB에서 사용하기 위한 Database를 지정하여 연결한다.
MongoDB는 내부에 여러 개의 Database가 존재하기 때문에, 사용할 Database를 명시적으로 지정해야 한다.
만약 해당 Database가 없으면 생성하고 연결한다.
 
MongoClient 인스턴스의 get_database 메소드를 사용한다.
해당 메소드는 다음과 같이 정의 되어 있다.
get_database(name: Optional[str] = None,
    codec_options: Optional[bson.codec_options.CodecOptions] = None,
    read_preference: Optional[pymongo.read_preferences._ServerMode] = None,
    write_concern: Optional[pymongo.write_concern.WriteConcern] = None,
    read_concern: Optional[ReadConcern] = None)
    → pymongo.database.Database[pymongo.typings._DocumentType]
 
해당 함수에 사용할 Database의 이름을 전달하면 pymongo 내부의 Database 타입의 객체를 반환한다.
다음과 같이 사용한다.
db_name = "test"
db = conn.get_database(db_name)

print(db)
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, 
connect=True), 'test')
 
자세한 사항은 아래 기술 문서를 참고한다.
Collection 목록 조회
MongoDB의 특정 Database 내부에 존재하는 Collection의 목록을 가져온다.
 
pymongo 내부의 Database 클래스에 정의 된 list_collection_names와 list_collection 메소드를 사용한다.
사용하는 함수에 따라 문자열의 리스트 타입으로 반환하거나 Document의 리스트 타입으로 반환할 수 있다.
 
list_collection_names 함수
해당 메소드는 다음과 같이 정의 되어 있다.
list_collection_names(session: Optional[ClientSession] = None ,
    filter: Optional[Mapping [str, Any]] = None ,
    comment: Optional[Any] = None ,
    ** kwargs: Any)
    → List[str]
 
MongoDB의 특정 Database 내부에는 여러 개의 Collection이 존재한다.
따라서 해당 함수를 호출하면 문자열의 리스트 타입으로 반환한다.
다음과 같이 사용한다.
db_name = "test"
db = conn.get_database(db_name)

for item in db.list_collection_names():
    print(item)

test
delete_me
 
자세한 사항은 아래 기술 문서를 참고한다.
list_collections 함수
해당 메소드는 다음과 같이 정의 되어 있다.
list_collections(session: Optional[ClientSession] = None,
    filter: Optional[Mapping[str, Any]] = None,
    comment: Optional[Any] = None,
    **kwargs: Any)
    → pymongo.command_cursor.CommandCursor[Dict[str, Any]]
 
MongoDB의 특정 Database 내부에는 여러 개의 Collection이 존재한다.
따라서 해당 함수를 호출하면 Document의 리스트 타입으로 반환한다.
다음과 같이 사용한다.
db_name = "test"
db = conn.get_database(db_name)

for item in db.list_collections():
    print(item)

{'name': 'test', 'type': 'collection', 'options': {},
'info': {'readOnly': False, 'uuid': Binary(b'?\x88\x9f\xb0\x82hI\xf3\xa7L-\xce\xfbb\xcaG', 4)},
'idIndex': {'v': 2, 'key': {'_id': 1}, 'name': '_id_'}}
{'name': 'delete_me', 'type': 'collection', 'options': {},
'info': {'readOnly': False, 'uuid': Binary(b"v\x81Rr\x19\x9cE\x8b\xb0[\x87q'\x1b\\\x07", 4)},
'idIndex': {'v': 2, 'key': {'_id': 1}, 'name': '_id_'}}
 
자세한 사항은 아래 기술 문서를 참고한다.
Collection 연결
MongoDB에서 Collection은 RDBMS의 Table과 같은 역할을 수행한다.
따라서 사용하고자 하는 Collection을 지정해줘야 한다.
만약 해당 Collection이 없으면 생성하고 연결한다.
 
pymongo 내부의 Database 클래스에 정의 된 get_collection 메소드를 사용한다.
해당 메소드는 다음과 같이 정의 되어 있다.
get_collection(name: str,
    codec_options: Optional[bson.codec_options.CodecOptions] = None,
    read_preference: Optional[pymongo.read_preferences._ServerMode] = None,
    write_concern: Optional[WriteConcern] = None,
    read_concern: Optional[ReadConcern] = None)
    → pymongo.collection.Collection[pymongo.typings._DocumentType]
 
해당 함수에 사용할 Collection의 이름을 전달하면 pymongo 내부의 Collection 타입의 객체를 반환한다.
다음과 같이 사용한다.
collection_name = "test"
coll = db.get_collection(collection_name)

print(coll)
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, 
tz_aware=False, connect=True), 'test'), 'test')
 
자세한 사항은 아래 기술 문서를 참고한다.

데이터 추가 (insert)

데이터 추가는 insert 계열 함수를 사용한다.
데이터를 한 개만 추가하는 경우에는 insert_one, 여러 개를 추가하는 경우 insert_many  함수를 사용한다.
pymongo 내부의 Collection 클래스에 메소드로 정의되어 있다.
 
데이터 추가 관련 내용은 아래 포스팅을 참고한다.
insert_one 함수
insert_one 함수는 다음과 같이 정의 되어 있다.
insert_one(document: Union[MutableMapping[str, Any], RawBSONDocument],
    bypass_document_validation: bool = False,
    session: Optional[ClientSession] = None,
    comment: Optional[Any] = None)
    → pymongo.results.InsertOneResult
 
다음과 같이 사용한다.
document = { "name": "Trump", "age": 70 }

coll.insert_one(document)
<pymongo.results.InsertOneResult object at 0x7ff4a16da280>
 
정상적으로 입력되면 InsertOneResult 타입의 객체를 반환한다.
 
오류로 인해 데이터 입력에 실패하면 다음과 같은 예외가 발생한다.
coll.insert_one(document)
... 생략 ...
    raise DuplicateKeyError(error.get("errmsg"), 11000, error)
pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection: test.test 
index: _id_ dup key: { _id: ObjectId('6278b431ab13002408ae1c51') }, 
full error: {'index': 0, 'code': 11000, 'keyPattern': {'_id': 1}, 
'keyValue': {'_id': ObjectId('6278b431ab13002408ae1c51')}, 
'errmsg': "E11000 duplicate key error collection: test.test 
index: _id_ dup key: { _id: ObjectId('6278b431ab13002408ae1c51') }"}
 
자세한 사항은 아래 기술 문서를 참고한다.
 
insert_many 함수
insert_many 함수는 다음과 같이 정의 되어 있다.
insert_many(documents: Iterable[Union[MutableMapping[str, Any], RawBSONDocument]],
    ordered: bool = True,
    bypass_document_validation: bool = False,
    session: Optional[ClientSession] = None,
    comment: Optional[Any] = None)
    → pymongo.results.InsertManyResult
 
다음과 같이 사용한다.
documents = [{ "name": "Trump", "age": 70 }, { "name": "Obama", "age": 50 }]

coll.insert_many(documents)
<pymongo.results.InsertManyResult object at 0x7ff4a16da130>
 
정상적으로 입력되면 InsertManyResult 타입의 객체를 반환한다.

 

오류로 인해 데이터 입력에 실패하면 다음과 같은 예외가 발생한다.
coll.insert_many(documents)
... 생략 ...
    raise BulkWriteError(full_result)
pymongo.errors.BulkWriteError: batch op errors occurred, 
full error: {'writeErrors': [{'index': 0, 'code': 11000, 'keyPattern': {'_id': 1}, 
'keyValue': {'_id': ObjectId('6278b4eeab13002408ae1c52')}, 
'errmsg': "E11000 duplicate key error collection: test.test 
index: _id_ dup key: { _id: ObjectId('6278b4eeab13002408ae1c52') }", 
'op': {'name': 'Trump', 'age': 70, '_id': ObjectId('6278b4eeab13002408ae1c52')}}], 
'writeConcernErrors': [], 'nInserted': 0, 'nUpserted': 0, 'nMatched': 0, 
'nModified': 0, 'nRemoved': 0, 'upserted': []}
 
insert_one과 다르게 BulkWriteError가 발생한 것을 알 수 있다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 

데이터 삭제 (Delete)

데이터 삭제는 delete 계열 함수를 사용한다.
데이터를 한 개만 삭제하는 경우에는 delete_one, 여러 개를 삭제하는 경우 delete_many  함수를 사용한다.
pymongo 내부의 Collection 클래스에 메소드로 정의되어 있다.
 
데이터 삭제 관련 내용은 아래 포스팅을 참고한다.
delete_one 함수
delete_one 함수는 다음과 같이 정의 되어 있다.
delete_one(filter: Mapping[str, Any],
    collation: Optional[Union[Mapping[str, Any], Collation]] = None,
    hint: Optional[Union[str, Sequence[Tuple[str, Union[int, str, Mapping[str, Any]]]]]] = None,
    session: Optional[ClientSession] = None,
    let: Optional[Mapping[str, Any]] = None,
    comment: Optional[Any] = None)
    → pymongo.results.DeleteResult
 
다음과 같이 사용한다.
document = { "name": "Trump", "age": 70 }

coll.delete_one(document)
<pymongo.results.DeleteResult object at 0x7ff4a16dad60>
 
정상적으로 삭제되면 DeleteResult 타입의 객체를 반환한다.
동일한 Document가 여러 개인 경우 처음 발견되는 Document 한 개만 삭제한다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 
delete_many 함수
delete_many 함수는 다음과 같이 정의 되어 있다.
delete_many(filter: Mapping[str, Any],
    collation: Optional[Union[Mapping[str, Any], Collation]] = None,
    hint: Optional[Union[str, Sequence[Tuple[str, Union[int, str, Mapping[str, Any]]]]]] = None,
    session: Optional[ClientSession] = None,
    let: Optional[Mapping[str, Any]] = None,
    comment: Optional[Any] = None)
    → pymongo.results.DeleteResult
 
다음과 같이 사용한다.
document = { "name": "Obama", "age": 50 }

coll.delete_many(document)
<pymongo.results.DeleteResult object at 0x7ff4a16d2ca0>
 
정상적으로 삭제되면 DeleteResult 타입의 객체를 반환한다.
동일한 Document가 여러 개인 경우 해당되는 모든 Document가 삭제된다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 

데이터 수정 (Update)

데이터 수정은 update 계열 함수를 사용한다.
데이터를 한 개만 수정하는 경우에는 update_one, 여러 개를 수정하는 경우 update_many  함수를 사용한다.
pymongo 내부의 Collection 클래스에 메소드로 정의되어 있다.
 
데이터 수정 관련 내용은 아래 포스팅을 참고한다.
update_one 함수
update_one 함수는 다음과 같이 정의 되어 있다.
update_one(filter: Mapping[str, Any],
    update: Union[Mapping[str, Any],
    Sequence[Mapping[str, Any]]], upsert: bool = False,
    bypass_document_validation: bool = False,
    collation: Optional[Union[Mapping[str, Any], Collation]] = None,
    array_filters: Optional[Sequence[Mapping[str, Any]]] = None,
    hint: Optional[Union[str, Sequence[Tuple[str, Union[int, str, Mapping[str, Any]]]]]] = None,
    session: Optional[ClientSession] = None,
    let: Optional[Mapping[str, Any]] = None,
    comment: Optional[Any] = None)
    → pymongo.results.UpdateResult
 
다음과 같이 사용한다.
update_doc = { "name": "Trump" }
update_cal = { "$inc": {"age" : 3} }

coll.update_one(update_doc, update_cal)
<pymongo.results.UpdateResult object at 0x7ff4a16dad90>

for item in coll.find({"name": "Trump"}):
    print(item)
{'_id': ObjectId('6278c1c4ab13002408ae1c54'), 'name': 'Trump', 'age': 73}
 
정상적으로 수정되면 UpdateResult 타입의 객체를 반환한다.
동일한 Document가 여러 개인 경우 처음 발견되는 Document 한 개만 수정한다.
 
자세한 사항은 아래 기술 문서를 참고한다.
update_many 함수
update_many 함수는 다음과 같이 정의 되어 있다.
update_many(filter: Mapping[str, Any],
    update: Union[Mapping[str, Any],
    Sequence[Mapping[str, Any]]],
    upsert: bool = False,
    array_filters: Optional[Sequence[Mapping[str, Any]]] = None,
    bypass_document_validation: Optional[bool] = None,
    collation: Optional[Union[Mapping[str, Any], Collation]] = None,
    hint: Optional[Union[str, Sequence[Tuple[str, Union[int, str, Mapping[str, Any]]]]]] = None,
    session: Optional[ClientSession] = None,
    let: Optional[Mapping[str, Any]] = None,
    comment: Optional[Any] = None)
    → pymongo.results.UpdateResult
 
다음과 같이 사용한다.
update_doc = { "name": "Obama" }
update_cal = { "$inc": {"age" : 3} }

coll.update_many(update_doc, update_cal)
<pymongo.results.UpdateResult object at 0x7ff4a16dae50>

for item in coll.find({"name": "Obama"}):
    print(item)
{'_id': ObjectId('6278c1c4ab13002408ae1c55'), 'name': 'Obama', 'age': 53}
{'_id': ObjectId('6278c4edab13002408ae1c56'), 'name': 'Obama', 'age': 3}
{'_id': ObjectId('6278c515ab13002408ae1c57'), 'name': 'Obama', 'age': 53}
 
정상적으로 수정되면 UpdateResult 타입의 객체를 반환한다.
동일한 Document가 여러 개인 경우 해당되는 모든 Document가 수정된다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 

인덱스 생성

MongoDB에서 Document를 구분하고 쿼리에 사용하기 위한 _id (인덱스) 필드를 기본으로 제공한다.
그 외에도 MongoDB의 쿼리 속도를 높이기 위해 고유한 인덱스 (Unique Index)를 생성할 수 있다.
 
사용자가 지정한 인덱스 필드는 오름차순 또는 내림차순으로 지정할 수 있다.
또한 unique 옵션이 True로 설정되면 중복 값을 허용하지 않기 때문에 RDBMS의 PRIMARY KEY처럼 활용할 수 있다.
 
pymongo 내부의 Collection 클래스에 정의 된 create_index 메소드를 사용한다.
다음과 같이 정의 되어 있다.
create_index(keys: Union[str, Sequence[Tuple[str, Union[int, str, Mapping[str, Any]]]]],
    session: Optional[ClientSession] = None,
    comment: Optional[Any] = None,
    **kwargs: Any)
    → str
 
다음과 같이 사용한다.
coll.create_index([('user_id', pymongo.ASCENDING)], unique=True)
sorted(list(coll.index_information()))
 
unique 옵션이 True이기 때문에 해당 필드에 중복 된 값을 허용하지 않는다.
pymongo.ASCENDING 또는 pymongo.DESCENDING을 사용하여 오름차순 또는 내림차순 여부를 지정한다.
background 옵션에 True가 전달 되면 인덱스 생성을 백그라운드에서 진행한다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 

데이터 조회

데이터 조회는 find 계열 함수를 사용한다..
pymongo 내부의 Collection 클래스에 메소드로 정의되어 있다.
 
기본적으로 find 함수를 사용하지만, 다른 작업과 결합한 함수들도 제공한다.
함수명
내용
find
조건에 일치하는 모든 Document 반환
find_one
조건에 일치하는 첫번째 Document 반환
find_one_and_delete
조건에 일치하는 첫번째 Document를 찾고 삭제
find_one_and_replace
조건에 일치하는 첫번째 Document를 찾고 교체
find_one_and_update
조건에 일치하는 첫번째 Document를 찾고 수정
find_raw_batches
조건에 일치하는 모든 Document를 BSON 타입으로 반환
 
find_one_and_replace는 기존 Document를 대체하고, find_one_and_update는 기존 Document를 수정한다.
  • replace는 새로운 Document로 변경되는 것이기 때문에, $inc와 같은 상태 변경 연산자는 사용하지 않는다.
  • update는 기존 Document를 수정하는 것이기 때문에, $inc와 같은 상태 변경 연산자를 사용할 수 있다.
 
pymongo 내부의 Collection 클래스에 메소드로 정의되어 있다.
아래에서는 자주 사용하는 find와 find_one 함수에 대해 정리한다.
 
데이터 조회 관련 내용은 아래 포스팅을 참고한다.
 
find 함수
find 함수는 다음과 같이 정의 되어 있다.
find(filter=None,
    projection=None,
    skip=0,
    limit=0,
    no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE,
    sort=None,
    allow_partial_results=False, oplog_replay=False, batch_size=0, collation=None, hint=None,
    max_scan=None, max_time_ms=None, max=None, min=None,
    return_key=False,
    show_record_id=False, snapshot=False, comment=None, session=None, allow_disk_use=None)
 
주요 전달 인자는 다음과 같다.
인자명
기본값
Optional
내용
filter
None
O
조회할 조건 지정
projection
None
O
조회할 때 출력할 Field 지정
skip
0
O
조회 결과에서 제외할 개수 (처음부터 지정한 개수까지)
limit
0
O
조회 결과 중 처음부터 출력할 개수 (0은 무제한)
sort
None
O
조회 결과의 정렬 여부
return_key
False
O
True인 경우 Document의 Index Key만 반환
 
다음과 같이 사용한다.
# 전체 조회
results = coll.find()

# 특정 조건 조회
results = coll.find({"name": "Trump")

# 특정 범위 조건 조회
results = coll.find({"age": { $gte: 30 } })

# 조회 결과에서 앞에 3개 제외하고 이후 2개 출력
results = coll.find({"age": { $gte: 30 } }, skip=3, limit=2)

# 결과 출력
for item in results:
    print(item)
 
정상적으로 조회되면 조회 결과는 리스트 타입으로 반환된다.
따라서 반복문 또는 리스트의 인덱스를 사용해서 결과를 확인해야 한다.
 
자세한 사항은 아래 기술 문서를 참고한다.
 
find_one 함수
find_one 함수는 다음과 같이 정의 되어 있다.
find_one(filter=None, *args, **kwargs)
 
find 함수의 모든 전달인자들을 **kwargs로 전달해서 사용할 수 있다.
 
조회 결과가 여러 개인 경우 처음 발견 되는 Document 한 개만 반환한다.
 
다음과 같이 사용한다.
coll.find_one({"name": "Obama"})
{'_id': ObjectId('6278c1c4ab13002408ae1c55'), 'name': 'Obama', 'age': 53}
 
자세한 사항은 아래 기술 문서를 참고한다.
 

삭제

MongoDB에서 사용하지 않는 Database나 Collection을 삭제할 수 있다.
별도의 경고 메시지를 출력하지 않으므로 주의해서 사용해야 한다.
 
Database 삭제
MongoClient 인스턴스의 drop_database 메소드를 사용한다.
 
해당 메소드는 다음과 같이 정의 되어 있다.
drop_database(name_or_database: Union[str, pymongo.database.Database],
    session: Optional[pymongo.client_session.ClientSession] = None,
    comment: Optional[Any] = None)
    → None
 
별도의 경고 메시지를 출력하지 않으므로 주의해서 사용해야 한다.
다음과 같이 사용한다.
db_name = "test"
conn.drop_database(db_name)
 
자세한 사항은 아래 기술 문서를 참고한다.
Collection 삭제
pymongo 내부의 Collection 클래스에 정의 된 drop_collection 메소드를 사용한다.
 
해당 메소드는 다음과 같이 정의 되어 있다.
drop_collection(name_or_collection: Union[str, pymongo.collection.Collection],
    session: Optional[ClientSession] = None,
    comment: Optional[Any] = None)
    → Dict[str, Any]
 
별도의 경고 메시지를 출력하지 않으므로 주의해서 사용해야 한다.
다음과 같이 사용한다.
db_name = "test"
db = conn.get_database(db_name)

collection_name = "delete_me"
db.drop_collection(collection_name)
 
자세한 사항은 아래 기술 문서를 참고한다.
 

해제

클라이언트에서 MongoDB와 연결 된 리소스를 정리하고 연결을 해제한다.
MongoClient 인스턴스의 close 메소드를 사용한다.
 
close 메소드는 다음과 같이 정의 되어 있다.
close() → None
 
전달 인자는 없고 다음과 같이 사용한다.
conn.close()
 
자세한 사항은 아래 기술 문서를 참고한다.