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

데이터베이스 명령 실행

이 페이지의 내용

  • 개요
  • 명령 실행
  • 명령 옵션
  • 응답
  • 예시
  • 출력
  • 추가 정보
  • API 문서

이 가이드 에서는 C 운전자 를 사용하여 데이터베이스 명령 을 실행 하는 방법을 학습 수 있습니다. 데이터베이스 명령을 사용하여 서버 통계 가져오기, 복제본 세트 초기화 또는 집계 파이프라인 실행 과 같은 다양한 관리 및 진단 작업을 수행할 수 있습니다.

중요

데이터베이스 명령보다 드라이버 함수 선호

운전자 는 많은 데이터베이스 명령에 대한 래퍼 함수를 제공합니다. 가능하면 데이터베이스 명령을 실행하는 대신 운전자 함수를 사용하는 것이 좋습니다.

관리 작업을 수행하려면 C 운전자 대신 MongoDB Shell을 사용합니다. db.runCommand() 셸 내에서 메서드를 호출하는 것은 셸 과 드라이버 간에 일관적인 인터페이스를 제공하므로 데이터베이스 명령을 실행하는 데 선호되는 메서드입니다.

데이터베이스 명령 을 실행 하려면 BSON 문서 에 명령과 관련 매개변수를 지정한 다음 이 BSON 문서 를 명령 실행 함수에 전달해야 합니다. C 운전자 는 데이터베이스 명령을 실행 하기 위해 다음과 같은 기능을 제공합니다.

  • mongoc_client_command_simple()서버 에서 지정된 명령을 실행하고 결과의 첫 번째 문서 를 reply BSON 문서 에 저장합니다. 이 함수는 서버 에 직접 명령을 보내는 간단한 방법을 제공합니다.

  • mongoc_client_command_with_opts()서버 에서 지정된 명령을 실행하고 MongoDB 서버 버전에 따라 opts 을 해석합니다. 이 기능은 추가 옵션을 허용하여 유연성을 제공합니다.

다음 코드는 mongoc_client_command_simple() 함수를 사용하여 복제본 세트 에서 현재 멤버의 역할 에 대한 정보를 반환하는 hello 명령을 데이터베이스 에서 실행 하는 방법을 보여줍니다.

bson_t reply;
bson_error_t error;
bson_t *command = BCON_NEW ("hello", BCON_INT32 (1));
bool retval = mongoc_client_command_simple (client, "admin", command, NULL, &reply, &error);
if (!retval) {
fprintf (stderr, "Failed to run command: %s\n", error.message);
} else {
char *str = bson_as_canonical_extended_json (&reply, NULL);
printf ("%s\n", str);
bson_free (str);
}
bson_destroy (command);
bson_destroy (&reply);

데이터베이스 명령 및 해당 매개변수의 전체 목록은 추가 정보 섹션을 참조하십시오.

mongoc_client_command_with_opts() 함수에 대한 선택적 명령 동작을 지정할 수 있습니다. 이 함수는 opts 매개변수에 대한 BSON 문서 를 허용합니다.

다음 옵션을 지정하는 BSON 문서 를 전달할 수 있습니다.

  • readConcern

  • writeConcern

  • sessionId

  • collation

  • serverId

명령과 해당 명령이 허용하는 옵션에 학습 보려면 해당 명령을 찾아 서버 매뉴얼의 데이터베이스 명령 섹션에 있는 링크를 클릭하세요.

다음 코드는 majority 쓰기 고려 (write concern) 를 사용하여 grantRolesToUsers 명령을 지정하는 방법을 보여줍니다.

bson_t reply;
bson_error_t error;
bson_t *command = BCON_NEW(
"grantRolesToUser", BCON_UTF8("user011"),
"roles", "[", BCON_UTF8("readWrite"), "]"
);
mongoc_write_concern_t *write_concern = mongoc_write_concern_new();
mongoc_write_concern_set_w (write_concern, MONGOC_WRITE_CONCERN_W_MAJORITY);
bson_t *opts = bson_new();
mongoc_write_concern_append(write_concern, opts);
bool retval = mongoc_client_command_with_opts(client, "admin", command, NULL, opts, &reply, &error);
if (!retval) {
fprintf(stderr, "Failed to run command: %s\n", error.message);
} else {
char *str = bson_as_canonical_extended_json(&reply, NULL);
printf("Command Result: %s\n", str);
bson_free(str);
}
bson_destroy(command);
bson_destroy(opts);
bson_destroy(&reply);
mongoc_write_concern_destroy (write_concern);

참고

읽기 설정

mongoc_client_command_simple()mongoc_client_command_with_opts() 함수는 클라이언트 에서 설정하다 했을 수 있는 읽기 설정 (read preference) 을 무시합니다. 기본값 으로 이러한 함수는 primary 읽기 설정 (read preference) 을 사용합니다.

프라이머리 읽기 설정 (read preference) 이외의 읽기 설정 (read preference) 을 지정하려면 이를 인수로 명시적으로 전달해야 합니다. 다음 코드는 읽기 설정 (read preference) 을 지정하고 이를 mongoc_client_command_simple() 함수와 함께 사용하는 방법을 보여줍니다.

read_prefs = mongoc_read_prefs_new(MONGOC_READ_SECONDARY);
command = BCON_NEW("hello", BCON_INT32(1));
retval = mongoc_client_command_simple(client, "admin", command,
read_prefs, &reply, &error);

읽기 설정 옵션에 대한 자세한 내용은 MongoDB Server 매뉴얼의 읽기 설정 을 참조하세요.

각 함수는 명령이 실행된 후 BSON 문서 또는 데이터베이스 의 응답이 포함된 커서 를 반환합니다. 각 데이터베이스 명령 은 서로 다른 기능을 수행하므로 응답 내용은 명령에 따라 다를 수 있습니다. 그러나 모든 응답에는 다음 필드가 있는 문서가 포함되어 있습니다.

  • <command result>: 데이터베이스 명령 과 관련된 필드를 제공합니다. 예를 예시countn 필드 를 반환하고 explainqueryPlanner 필드 를 반환합니다.

  • ok: 명령이 성공했는지(1) 실패했는지(0)를 나타냅니다.

다음 코드는 mongoc_client_write_command_with_opts() 함수를 사용하여 writeConcern 옵션으로 cloneCollectionAsCapped 명령을 실행 하는 방법을 보여줍니다. 그런 다음 mongoc_client_read_command_with_opts() 함수를 사용하여 collationreadConcern 옵션과 함께 distinct 명령을 실행 합니다.

1bson_t reply;
2bson_error_t error;
3
4bson_t *cmd = BCON_NEW ("cloneCollectionAsCapped",
5 BCON_UTF8 ("my_collection"),
6 "toCollection",
7 BCON_UTF8 ("my_capped_collection"),
8 "size",
9 BCON_INT64 (1024 * 1024));
10
11/* Includes write concern "majority" in command options */
12mongoc_write_concern_t *write_concern = mongoc_write_concern_new ();
13mongoc_write_concern_set_w (write_concern, MONGOC_WRITE_CONCERN_W_MAJORITY);
14bson_t *opts = bson_new ();
15mongoc_write_concern_append (write_concern, opts);
16
17if (mongoc_client_write_command_with_opts (client, "test", cmd, opts, &reply, &error)) {
18 char *str = bson_as_canonical_extended_json (&reply, NULL);
19 printf ("cloneCollectionAsCapped: %s\n", str);
20 bson_free (str);
21} else {
22 fprintf (stderr, "cloneCollectionAsCapped: %s\n", error.message);
23}
24
25bson_free (cmd);
26bson_free (opts);
27bson_destroy (&reply);
28
29/* Defines distinct values of "x" in "my_collection" where "y" sorts after "one" */
30cmd = BCON_NEW ("distinct",
31 BCON_UTF8 ("my_collection"),
32 "key",
33 BCON_UTF8 ("x"),
34 "query",
35 "{",
36 "y",
37 "{",
38 "$gt",
39 BCON_UTF8 ("one"),
40 "}",
41 "}");
42
43mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY);
44
45/* Specifies "One" sorts after "one" to override default behavior */
46opts = BCON_NEW ("collation", "{", "locale", BCON_UTF8 ("en_US"), "caseFirst", BCON_UTF8 ("lower"), "}");
47
48/* Adds a read concern to "opts" */
49mongoc_read_concern_t *read_concern = mongoc_read_concern_new ();
50mongoc_read_concern_set_level (read_concern, MONGOC_READ_CONCERN_LEVEL_MAJORITY);
51mongoc_read_concern_append (read_concern, opts);
52
53if (mongoc_client_read_command_with_opts (client, "test", cmd, read_prefs, opts, &reply, &error)) {
54 char* str = bson_as_canonical_extended_json (&reply, NULL);
55 printf ("distinct: %s\n", str);
56 bson_free (str);
57} else {
58 fprintf (stderr, "distinct: %s\n", error.message);
59}
60
61bson_destroy (cmd);
62bson_destroy (opts);
63bson_destroy (&reply);
64mongoc_read_prefs_destroy (read_prefs);
65mongoc_read_concern_destroy (read_concern);
66mongoc_write_concern_destroy (write_concern);

cloneCollectionAsCapped 명령은 컬렉션을 고정 고정 사이즈 컬렉션 컬렉션 으로 복제합니다. 그런 다음 distinct 명령은 지정된 필터하다 및 데이터 정렬을 사용하여 필드 의 고유 값을 가져옵니다. 이 예시 에서는 다음과 같은 결과가 출력됩니다.

cloneCollectionAsCapped: { "ok": 1, ... } distinct: { "values": ["value1",
"value2", "value3"], "ok": 1, ... }

이 가이드의 개념에 대한 자세한 내용은 다음 문서를 참조하세요.

돌아가기

시계열