데이터베이스 명령 실행
개요
이 가이드 에서는 PyMongo 를 사용하여 데이터베이스 명령 을 실행 하는 방법을 학습 수 있습니다. 데이터베이스 명령을 사용하여 서버 통계 가져오기, 복제본 세트 초기화 또는 집계 파이프라인 실행 과 같은 다양한 관리 및 진단 작업을 수행할 수 있습니다.
중요
데이터베이스 명령보다 라이브러리 메서드를 선호합니다.
라이브러리는 많은 데이터베이스 명령에 대한 래퍼 메서드를 제공합니다. 가능하면 데이터베이스 명령을 실행하는 대신 이러한 방법을 사용하는 것이 좋습니다.
관리 작업을 수행하려면 PyMongo 대신MongoDB Shell 을 사용합니다. 셸 은 shell 운전자 에서 사용할 수 없는 헬퍼 메서드를 제공합니다.
라이브러리나 셸 에 사용 가능한 헬퍼가 없는 shell 경우 이 db.runCommand()
shell 가이드 command()
에 설명된 셸 메서드 또는 드라이버의 메서드를 사용할 수 있습니다.
명령 실행
command()
메서드를 사용하여 데이터베이스 명령 을 실행 수 있습니다. 명령과 관련 인수를 지정해야 합니다. 명령이 간단한 경우 문자열로 전달할 수 있습니다. 그렇지 않으면 dict
객체 로 전달될 수 있습니다. 이 메서드는 실행 된 명령의 결과를 반환합니다.
다음 코드는 Database
에서 command()
메서드를 사용하여 서버 에 대한 정보를 반환하는 hello
명령을 실행 하는 방법을 보여줍니다.
database = client.get_database("my_db") hello = database.command("hello") print(hello)
{ 'topologyVersion': { 'processId': ObjectId('6724d211d6b98fa1931e8616'), 'counter': 6 }, 'hosts': ['cluster0-shard-00-00.fxoii.mongodb.net:27017', 'cluster0-shard-00-01.fxoii.mongodb.net:27017', 'cluster0-shard-00-02.fxoii.mongodb.net:27017'], 'setName': 'atlas-13l6uw-shard-0', 'setVersion': 114, 'isWritablePrimary': True, 'secondary': False, 'primary': 'cluster0-shard-00-02.fxoii.mongodb.net:27017', 'tags': { 'workloadType': 'OPERATIONAL', 'diskState': 'READY', 'region': 'US_EAST_1', 'provider': 'AWS', 'nodeType': 'ELECTABLE', 'availabilityZone': 'use1-az5' }, 'me': 'cluster0-shard-00-02.fxoii.mongodb.net:27017', 'electionId': ObjectId('7fffffff00000000000000e3'), 'lastWrite': { 'opTime': { 'ts': Timestamp(1730486145, 22), 't': 227 }, 'lastWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45), 'majorityOpTime': { 'ts': Timestamp(1730486145, 22), 't': 227 }, 'majorityWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45) }, 'maxBsonObjectSize': 16777216, 'maxMessageSizeBytes': 48000000, 'maxWriteBatchSize': 100000, 'localTime': datetime.datetime(2024, 11, 1, 18, 35, 45, 309000), 'logicalSessionTimeoutMinutes': 30, 'connectionId': 23889, 'minWireVersion': 0, 'maxWireVersion': 21, 'readOnly': False, 'ok': 1.0, '$clusterTime': { 'clusterTime': Timestamp(1730486145, 22), 'signature': { 'hash': b"\x1a\xf7{>q%F\xc2\x89\x15\x13W29\x91\xaae'~\xe4", 'keyId': 7379292132843978793 } }, 'operationTime': Timestamp(1730486145, 22) }
데이터베이스 명령 및 해당 매개변수의 전체 목록은 추가 정보 섹션을 참조하십시오.
명령 커서
command()
메서드는 실행 된 명령의 결과를 반환합니다. MongoDB 명령을 실행하고 응답을 CommandCursor 로 구문 분석하는 메서드를 사용할 수도 있습니다.cursor_command()
CommandCursor
를 사용하여 명령 결과를 반복할 수 있습니다.
다음 예시 에서는 sample_mflix
데이터베이스 에서 cursor_command()
메서드를 사용합니다. movies
컬렉션 에서 find
명령을 실행하여 runtime
필드 의 값이 11
인 문서를 기준으로 필터하다 합니다.
database = client.get_database("sample_mflix") result = database.cursor_command("find", "movies", filter={"runtime": 11}) print(result.to_list())
{ '_id': ObjectId('573a1390f29313caabcd42e8'), 'runtime': 11, 'title': 'The Great Train Robbery', ... }, { {'_id': ObjectId('573a1394f29313caabce0f10'), 'runtime': 11, 'title': 'Glas', ... }, ...
명령의 응답 형식에 학습 보려면 데이터베이스 명령을 참조하세요.
참고
읽기 설정
command()
및 cursor_command()
메서드가 코드의 다른 곳에서 Database
인스턴스 에 설정하다 한 읽기 설정 (read preference) 을 따르지 않습니다. 매개 변수를 사용하여 ClientSession이 session
제공되고 이 세션이 트랜잭션 에 있는 경우 명령의 읽기 설정 (read preference) 은 트랜잭션의 읽기 설정 (read preference) 으로 설정하다 됩니다. 그렇지 않으면 명령의 읽기 설정 (read preference) 기본값은 PRIMARY
입니다.
다음 코드와 같이 read_preference
매개변수를 사용하여 명령 실행에 대한 읽기 설정 (read preference) 설정하다 지정할 수 있습니다.
from pymongo.read_preferences import Secondary database = client.get_database("my_db") hello = database.command("hello", read_preference=Secondary()) print(hello)
API문서에서 모듈에 read_preferences
자세히 보기 .
읽기 설정 (read preference) 옵션에 대해 학습 보려면 MongoDB Server 매뉴얼의 읽기 설정 을 참조하세요.
명령 예제
다음 예시 에서는 command()
메서드를 사용하여 dbStats
명령을 실행 하여 sample_mflix
데이터베이스 의 저장 통계를 조회 합니다.
database = client.get_database("sample_mflix") result = database.command("dbStats") print(result)
{'db': 'sample_mflix', 'collections': 9, 'views': 1, 'objects': 67662, 'avgObjSize': 1796.788182436227, 'dataSize': 121574282, 'storageSize': 97779712, 'totalFreeStorageSize': 0, 'numExtents': 0, 'indexes': 13, 'indexSize': 19423232, 'indexFreeStorageSize': 0, 'fileSize': 0, 'nsSizeMB': 0, 'ok': 1}
이 명령의 출력에는 데이터베이스 의 컬렉션에 대한 정보가 포함되며 컬렉션 전체에 저장된 데이터의 양과 크기가 설명됩니다.
추가 정보
이 가이드 의 개념에 대한 자세한 내용은 MongoDB Server 매뉴얼의 다음 문서를 참조하세요.
API 문서
command()
및 cursor_command()
메서드에 대한 자세한 내용은 다음 PyMongo API 문서를 참조하세요.