Docs Menu
Docs Home
/ / /
PyMongo 드라이버

데이터베이스 및 컬렉션

이 가이드에서는 PyMongo와 함께 MongoDB 데이터베이스 및 컬렉션을 사용하는 방법을 배울 수 있습니다.

MongoDB는 데이터를 다음 수준의 계층 구조로 구성합니다.

  • 데이터베이스: MongoDB 인스턴스에서 데이터 구성의 최상위 수준입니다.

  • 컬렉션: MongoDB는 문서를 컬렉션에 저장합니다. 관계형 데이터베이스의 테이블과 유사합니다.

  • 문서: string, 숫자, 날짜 및 기타 내장된 문서와 같은 리터럴 데이터를 포함합니다.

문서 필드 유형 및 구조에 대한 자세한 내용은 MongoDB Server 매뉴얼의 문서 가이드를 참조하세요.

MongoClient 인스턴스에서 사전 스타일의 액세스를 사용하여 데이터베이스에 액세스합니다.

다음 예제에서는 test_database 데이터베이스에 액세스합니다.

database = client["test_database"]

데이터베이스 인스턴스에서 딕셔너리 스타일의 액세스를 사용하여 컬렉션에 액세스합니다.

다음 예시 test_collection이라는 컬렉션 에 액세스합니다.

database = client["test_database"]
collection = database["test_collection"]

제공된 컬렉션 이름이 데이터베이스에 아직 존재하지 않는 경우, MongoDB는 데이터를 처음 삽입할 때 컬렉션을 암시적으로 생성합니다.

create_collection() 메서드를 사용하여 MongoDB database 에 컬렉션을 명시적으로 만듭니다.

다음 예시 example_collection라는 컬렉션 을 만듭니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

database = client["test_database"]
database.create_collection("example_collection")
database = client["test_database"]
await database.create_collection("example_collection")

최대 크기 및 문서 유효성 검사 규칙과 같은 컬렉션 옵션을 키워드 인수로 전달하여 지정할 수 있습니다. 선택적 매개변수의 전체 목록은 create_collection() API 문서를 참조하세요.

Time series 컬렉션은 일정 기간 동안의 측정 시퀀스를 효율적으로 저장 . 다음 예시 에서는 문서의 시간 필드 timestampexample_ts_collection time series 컬렉션 만듭니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

database = client["test_database"]
database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})
database = client["test_database"]
await database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})

PyMongo 에서 Time Series 데이터 사용하는 방법에 대한 자세한 내용은 Time Series 데이터 가이드 참조하세요.

지정된 메모리 크기나 문서 수를 초과하여 확장할 수 없는 고정 사이즈 컬렉션 생성할 수 있습니다. 다음 예시 최대 크기가 1000 바이트인 example_capped_collection 이라는 고정 사이즈 컬렉션 만듭니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

database = client["test_database"]
database.create_collection("example_capped_collection", capped=True, size=1000)
database = client["test_database"]
await database.create_collection("example_capped_collection", capped=True, size=1000)

고정 사이즈 컬렉션에 대해 자세히 학습 MongoDB Server 매뉴얼의 고정 사이즈 컬렉션을 참조하세요.

list_collections() 메서드를 호출하여 데이터베이스의 컬렉션 목록을 쿼리할 수 있습니다. 이 메서드는 데이터베이스의 모든 컬렉션과 관련 메타데이터가 포함된 커서를 반환합니다.

다음 예시 list_collections() 메서드를 호출하고 커서 반복하여 결과를 인쇄합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

database = client["test_database"]
collection_list = database.list_collections()
for c in collection_list:
print(c)
database = client["test_database"]
collection_list = await database.list_collections()
for c in collection_list:
print(c)

데이터베이스에서 컬렉션 이름만 쿼리하려면 다음과 같이 list_collection_name() 메서드를 호출합니다.

collection_list = database.list_collection_names()
for c in collection_list:
print(c)
collection_list = await database.list_collection_names()
async for c in collection_list:
print(c)

커서 반복에 대한 자세한 내용은 커서에서 데이터 액세스 항목을 참조하세요.

drop_collection() 메서드를 사용하여 데이터베이스에서 컬렉션을 삭제할 수 있습니다.

다음 예시 test_collection 컬렉션 삭제합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

collection = database["test_collection"]
collection.drop()
collection = database["test_collection"]
await collection.drop()

경고

컬렉션을 제거하면 컬렉션의 모든 데이터가 삭제됨

데이터베이스에서 컬렉션을 삭제하면 해당 컬렉션 내의 모든 문서와 모든 인덱스가 영구적으로 삭제됩니다.

컬렉션의 데이터가 더 이상 필요하지 않은 경우에만 컬렉션을 삭제하세요.

애플리케이션 에서 Python 이상을 사용하는 경우 3.5 PEP 에 484 설명된 대로 코드에 유형 힌트 를 추가할 수 있습니다. 유형 힌트는 변수, 매개변수, 함수 반환 값의 데이터 유형과 문서 구조를 나타냅니다. 일부 IDE는 유형 힌트를 사용하여 코드에 유형 오류가 있는지 확인하고 코드 완성을 위한 적절한 옵션을 제안할 수 있습니다.

참고

Python 3.7 및 이전 버전의 TypedDict

TypedDict 클래스는 typing 모듈에 있으며, 이는 Python 3.8 이상에서만 사용할 수 있습니다. 이전 버전의 Python 에서 TypedDict 클래스를 사용하려면 타이핑_확장 패키지 설치합니다.

데이터베이스 의 모든 문서가 잘 정의된 스키마 와 일치하는 경우 Python 클래스를 사용하여 문서 구조를 나타내는 유형 힌트를 지정할 수 있습니다. 이 클래스를 Database 객체 의 유형 힌트에 포함하면 저장 하거나 조회 모든 문서에 필요한 구조가 있는지 확인할 수 있습니다. 이렇게 하면 기본값 Dict[str, Any] 유형보다 더 정확한 유형 검사 및 코드 완성 기능이 제공됩니다.

먼저 데이터베이스 의 문서 나타내는 클래스를 정의합니다. 클래스는 TypedDict 클래스에서 상속되어야 하며 데이터베이스 의 문서와 동일한 필드를 포함해야 합니다. 클래스를 정의한 후 클래스 이름을 Database 유형 힌트의 일반 유형으로 포함합니다.

다음 예시 Movie 클래스를 정의하고 이를 Database 유형 힌트의 일반 유형으로 사용합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

from typing import TypedDict
from pymongo import MongoClient
from pymongo.database import Database
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database: Database[Movie] = client["test_database"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.asynchronous.database import Database
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database: Database[Movie] = client["test_database"]

Collection 유형 힌트에 일반 유형을 추가하는 것은 Database 유형 힌트에 일반 유형을 추가하는 것과 유사합니다. 먼저 TypedDict 클래스에서 상속되고 컬렉션 의 문서 구조를 나타내는 클래스를 정의합니다. 그런 다음 다음 예시 와 같이 클래스 이름을 Collection 유형 힌트의 일반 유형으로 포함합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

from typing import TypedDict
from pymongo import MongoClient
from pymongo.asynchronous.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]

MongoClient 객체 에 대한 유형 주석을 추가하지 않으면 유형 검사기에 다음과 유사한 오류가 표시될 수 있습니다.

from pymongo import MongoClient
client = MongoClient() # error: Need type annotation for "client"

해결책은 MongoClient 객체 에 client: MongoClient 또는 client: MongoClient[Dict[str, Any]]로 주석을 추가하는 것입니다.

유형 힌트로 MongoClient 를 지정했지만 문서, 키 및 값에 대한 데이터 유형을 포함하지 않는 경우 유형 검사기에 다음과 유사한 오류가 표시될 수 있습니다.

error: Dict entry 0 has incompatible type "str": "int";
expected "Mapping[str, Any]": "int"

해결 방법은 MongoClient 객체 에 다음 유형 힌트를 추가하는 것입니다.

``client: MongoClient[Dict[str, Any]]``

읽기 설정에 tag-sets 을(를) 지정하고 MongoDB가 지정된 태그를 가진 복제본 세트 멤버를 찾을 수 없는 경우 이 오류가 발생합니다. 이 오류를 방지하려면 태그 세트 목록 끝에 빈 사전({})을 포함하세요. 이는 일치하는 태그를 찾을 수 없는 경우 읽기 참조 모드와 일치하는 모든 멤버에서 읽도록 PyMongo에 지시합니다.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

연결 풀

이 페이지의 내용