명령 실행
개요
이 가이드에서는 Go 드라이버로 데이터베이스 명령을 실행하는 방법을 배울 수 있습니다. 데이터베이스 명령을 사용하여 서버 통계 가져오기, 복제본 세트 초기화 또는 집계 파이프라인 실행과 같은 다양한 관리 및 진단 작업을 수행할 수 있습니다.
명령 실행
데이터베이스 명령을 실행하려면 명령 문서에 명령 및 관련 매개변수를 지정한 다음 명령 문서를 래퍼 메서드에 전달해야 합니다. 명령 문서는 bson.D
와 같이 순서 보존 유형이어야 합니다. Go 드라이버는 데이터베이스 명령을 실행하기 위해 다음과 같은 방법을 제공합니다.
RunCommand()
SingleResult
유형으로 명령 응답을 반환합니다. 이 방법은 모든 데이터베이스 명령과 함께 사용할 수 있습니다.RunCommandCursor()
Cursor
유형으로 명령 응답을 반환합니다. You can use this method if your database command returns multiple result documents.
다음 코드는 RunCommand()
메서드를 사용하여 데이터베이스에서 복제본 세트의 현재 멤버의 역할에 대한 정보를 반환하는 hello
명령을 실행하는 방법을 보여 줍니다.
command := bson.D{{"hello", 1}} var result bson.M err = db.RunCommand(context.TODO(), command).Decode(&result)
데이터베이스 명령 및 해당 매개변수의 전체 목록은 추가 정보 섹션을 참조하세요.
참고
읽기 설정
RunCommand()
및 RunCommandCursor()
는 코드의 다른 곳에서 Database
객체에 설정했을 수 있는 읽기 설정 (read preference)을 따르지 않습니다. 두 메서드 중 하나에 RunCmdOptions
객체를 전달하여 명령 실행에 대한 읽기 설정을 지정할 수 있습니다.
opts := options.RunCmd().SetReadPreference(readpref.Primary()) cursor, err := db.RunCommandCursor(context.TODO(), command, opts)
읽기 설정 (read preference) 옵션에 대한 자세한 내용은 CRUD 작업의 실행 수정 기본 사항 페이지를 참조하세요.
응답
각 메서드는 명령이 실행된 후 SingleResult
객체 또는 데이터베이스의 응답이 포함된 커서를 반환합니다. 각 데이터베이스 명령은 다른 기능을 수행하므로 응답 내용은 명령에 따라 다를 수 있습니다. 그러나 모든 응답에는 다음 필드가 있는 문서가 포함되어 있습니다.
필드 | 설명 |
---|---|
<command result> | 데이터베이스 명령과 관련된 필드를 제공합니다. 예를 들어 count 은 n 필드를 반환하고 explain 는 queryPlanner 필드를 반환합니다. |
ok | 명령에 성공했는지( 1 ) 또는 실패했는지(0 ) 여부를 나타냅니다. |
operationTime | 작업의 논리적 시간을 나타냅니다. MongoDB 는 논리적 시간을 사용하여 작업의 순서를 지정합니다. 논리적 시간에 학습 보려면 글로벌 논리적 시계에 대한 블로그 포스트 을 참조하세요. |
$clusterTime | 서명된 cluster 시간을 반환하는 문서를 제공합니다. cluster 시간은 작업 순서를 지정하는 데 사용되는 논리적 시간입니다. 이 문서에는 다음 필드가 포함되어 있습니다:
|
예시
다음 코드는 RunCommand()
explain
메서드를 count
사용하여 flowers
db
데이터베이스의 collection 작업에 대한 명령을 실행하는 방법을 보여줍니다. explain
명령은 "queryPlanner"
상세도 모드에서 실행됩니다.
db := client.Database("db") // Creates commands to count documents in a collection and explain // how the count command runs countCommand := bson.D{{"count", "flowers"}} explainCommand := bson.D{{"explain", countCommand}, {"verbosity", "queryPlanner"}} // Retrieves results of the explain command var result bson.M err = db.RunCommand(context.TODO(), explainCommand).Decode(&result)
출력
출력에는 쿼리 옵티마이저에서 선택한 계획인 우선 계획 및 거부된 계획 등 count
작업의 실행을 설명하는 필드가 표시되어야 합니다. 출력에는 explain
명령 실행에 대한 정보도 포함됩니다.
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "db", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "db.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
추가 정보
이 가이드의 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
커서에서 데이터를 검색하는 방법을 알아보려면 커서에서 데이터 액세스 기본 사항 페이지를 참조하세요.