Docs Menu

데이터베이스 및 컬렉션

이 가이드에서는 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 이라는 collection을 만듭니다.

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

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

Time series 컬렉션은 일정 기간 동안의 측정 시퀀스를 효율적으로 저장 . 다음 예시 에서는 문서의 시간 필드 timestampexample_ts_collection time series 컬렉션 만듭니다.

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

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

지정된 메모리 크기나 문서 수를 초과하여 확장할 수 없는 고정 사이즈 컬렉션 생성할 수 있습니다. 다음 예시 최대 크기가 1000 바이트인 example_capped_collection(이)라는 고정 사이즈 컬렉션 을 만듭니다.

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

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

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

다음 예시에서는 list_collections() 메서드를 호출하고 커서를 반복하여 결과를 인쇄합니다.

collection_list = 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)

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

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

다음 예시에서는 test_collection 컬렉션을 삭제합니다.

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

경고

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

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

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

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

참고

Python 3.7 및 이전 버전의 TypedDict

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

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

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

다음 예시 Movie 클래스를 정의하고 이를 Database 유형 힌트의 일반 유형으로 사용합니다.

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"]

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

from typing import TypedDict
from pymongo import MongoClient
from pymongo.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
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 설명서를 참조하세요.