AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

CRUD 작업 구성

이 가이드 에서는 PyMongo 에서 읽기 및 쓰기 (write) 작업을 구성하는 방법을 학습 수 있습니다.

읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.

기본적으로 데이터베이스는 MongoClient 인스턴스에서 이러한 설정을 상속하고 컬렉션은 데이터베이스에서 설정을 상속합니다. 그러나 다음 방법 중 하나를 사용하여 데이터베이스 또는 컬렉션에서 이러한 설정을 변경할 수 있습니다.

  • get_database(): 데이터베이스를 가져오고 클라이언트의 읽기 설정, 읽기 고려 및 쓰기 설정을 적용합니다.

  • database.with_options(): 데이터베이스를 가져오고 현재 읽기 설정, 읽기 고려 및 쓰기 설정을 적용합니다.

  • get_collection(): 컬렉션을 가져오고 현재 읽기 설정, 읽기 고려 및 쓰기 설정을 적용합니다.

  • collection.with_options(): 컬렉션을 가져오고 데이터베이스의 읽기 설정, 읽기 고려 및 쓰기 설정을 적용합니다.

앞의 메서드를 사용하여 읽기 또는 쓰기 설정을 변경하려면 메서드를 호출하고 컬렉션 또는 데이터베이스 이름과 새 읽기 설정, 읽기 고려 또는 쓰기 설정을 전달합니다.

다음 예에서는 get_database() 메서드를 사용하여 test-database 데이터베이스의 읽기 설정, 읽기 고려 및 쓰기 설정을 변경하는 방법을 보여 줍니다.

client.get_database("test-database",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

다음 예에서는 get_collection() 메서드를 사용하여 test-collection 컬렉션의 읽기 및 쓰기 설정을 변경하는 방법을 보여 줍니다.

database.get_collection("test-collection",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

다음 예에서는 with_options() 메서드를 사용하여 test-collection 컬렉션의 읽기 및 쓰기 설정을 변경하는 방법을 보여 줍니다.

collection.with_options(read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

ReadPreference 열거형 에서 사용할 수 있는 읽기 설정 유형을 확인하려면 API 설명서를 참조하세요.

읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

MongoDB Server에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.

기본값 으로 PyMongo 읽을 멤버를 선택할 때 태그를 무시합니다. PyMongo 특정 태그를 선호하도록 지시하려면 해당 태그를 읽기 설정 (read preference) 클래스 생성자에 매개변수로 전달합니다.

다음 코드 예제에서 read_preference 매개변수에 전달된 태그 세트는 PyMongo가 뉴욕 데이터 센터('dc': 'ny')에서 읽기를 선호하고 샌프란시스코 데이터 센터('dc': 'sf')로 대체하도록 지시합니다.

db = client.get_database(
'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))

비프라이머리 읽기 설정 (read preference)이 있는 복제본 세트에 연결할 때 드라이버는 지연 시간 창 내에서 가장 가까운 유효한 복제본 세트 멤버에서 읽습니다. 샤딩된 클러스터에 연결할 때 드라이버는 지연 시간 창 내에서 접근 가능한 모든 mongos 인스턴스를 선택합니다. 읽기 설정 모드에 대해 자세히 알아보려면 읽기 설정 (read preference)을 참조하세요.

기본값으로 드라이버는 가장 가까운 유효한 서버의 핑 시간이 15 밀리초 이내인 서버만 사용합니다.

예시 를 들어 복제본 세트 에 5명의 멤버가 있고 가장 가까운 멤버의 핑 시간이 5 밀리초라고 가정해 보겠습니다. 기본값 localThresholdMS 가 15 밀리초인 경우, 다음 표에 표시된 것처럼 핑 시간이 20 밀리초 이하인 멤버만 지연 시간 창 내에 포함됩니다.

호스트
유형
핑 시간
지연 시간 창 내

host1

기본

5ms

host2

보조

9ms

host3

보조

13ms

host4

보조

24ms

No

host5

보조

42ms

No

지연 시간 창을 조정하려면 MongoClient() 생성자에 localThresholdMS 옵션을 전달합니다.

다음 예시 로컬 임계값을 35 밀리초로 지정합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

client = MongoClient(replicaSet='repl0',
readPreference=ReadPreference.SECONDARY_PREFERRED,
localThresholdMS=35)
client = AsyncMongoClient(replicaSet='repl0',
readPreference=ReadPreference.SECONDARY_PREFERRED,
localThresholdMS=35)

앞의 예제에서 PyMongo는 가장 가까운 멤버의 핑 시간 35 밀리초 내에 일치하는 멤버 간에 읽기를 분산합니다.

참고

PyMongo는 mongos 인스턴스를 통해 복제본 세트와 통신할 때 localThresholdMS 값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

PyMongo 네트워크 또는 서버 오류로 인해 특정 읽기 및 쓰기 (write) 작업이 실패할 경우 자동으로 한 번만 자동으로 재시도합니다.

MongoClient() 생성자에서 retryReads 또는 retryWrites 옵션을 False 로 설정하여 재시도 가능 읽기 또는 재시도 가능 쓰기를 명시적으로 비활성화할 수 있습니다. 다음 예시 클라이언트 에 대해 재시도 가능 읽기 및 쓰기를 비활성화합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

client = MongoClient("<connection string>",
retryReads=False, retryWrites=False)
client = AsyncMongoClient("<connection string>",
retryReads=False, retryWrites=False)

지원되는 재시도 가능 읽기 작업에 대해 자세히 학습 MongoDB Server 매뉴얼의 재시도 가능 읽기를 참조하세요. 지원되는 재시도 가능 쓰기 (write) 작업에 대해 자세히 학습 MongoDB Server 매뉴얼의 재시도 가능 쓰기 참조하세요.

다음 클라이언트 옵션을 사용하여 서버 과부하 오류를 반환할 때 PyMongo 작업을 처리하는 방법을 구성할 수 있습니다.

  • enable_overload_retargeting: 드라이버 오버로드 오류를 반환하는 서버 우선 순위를 낮추어 오버로드된 동일한 서버 에서 재시도할 가능성을 줄일지 여부를 지정합니다. 기본값 은 False입니다.

  • max_adaptive_retries: 서버 과부하 오류를 반환할 때 드라이버 작업을 다시 시도하는 최대 횟수를 지정합니다. 기본값 은 2입니다.

다음 예시 MongoClient 을 생성하고 오버로드 재시도 옵션을 구성합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

client = MongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)
client = AsyncMongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)

컬렉션 만들 때 컬렉션 에서 수행하는 모든 작업에 대한 기본값 데이터 정렬 을 지정할 수 있습니다.

데이터 정렬은 대소문자 및 악센트 표시와 같이 문자열 비교를 위한 언어별 규칙 설정하다 입니다.

데이터 정렬을 지정하려면 Collation 클래스 또는 Python 사전의 인스턴스 만듭니다. Collation 생성자에 전달하거나 사전에 키로 포함할 수 있는 옵션 목록은 MongoDB Server 매뉴얼의 데이터 정렬 을 참조하세요.

데이터 정렬 가져오기

Collation 클래스의 인스턴스 만들려면 pymongo.collation에서 가져와야 합니다.

다음 예시 이전 예시 와 동일한 컬렉션 생성하지만 기본값 데이터 정렬은 fr_CA입니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

from pymongo.collation import Collation
database = client["test_database"]
database.create_collection("example_collection", collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation
database = client["test_database"]
await database.create_collection("example_collection", collation=Collation(locale='fr_CA'))