Otimizar consultas usando índices
Nesta página
- Visão geral
- Aplicativo de amostra
- Índice de campo único
- Índice composto
- Multikey Index
- Índice Geoespacial
- índice único
- Índice curinga
- Índices clusterizados
- Text Index
- Excluir um índice.
- Gerenciamento do índice do Atlas Search
- Criar Índice de Atlas Search
- Listar índices de pesquisa
- Atualizar índices de pesquisa
- Excluir índices Atlas Search
Visão geral
Nesta página, você pode ver exemplos de código copiáveis que mostram como gerenciar diferentes tipos de índices usando o driver C.
Dica
Para saber mais sobre como trabalhar com índices, consulte o guiaTrabalhar com índices . Para saber mais sobre qualquer um dos índices mostrados nesta página, consulte o link fornecido em cada seção.
Para usar um exemplo desta página, copie o exemplo de código para oaplicativo de amostra ou para seu próprio aplicativo. Certifique-se de substituir todos os espaços reservados nos exemplos de código, como <connection string URI>
, pelos valores relevantes para sua implantação do MongoDB.
Aplicativo de amostra
Você pode usar o seguinte aplicativo de exemplo para testar os exemplos de código nesta página. Para usar o aplicativo de amostra, execute as seguintes etapas:
Verifique se o driver C está instalado.
Copie o seguinte código e cole-o em um novo arquivo
.c
.Copie um exemplo de código desta página e cole-o nas linhas especificadas no arquivo.
1 2 3 4 5 int 6 main (void) 7 { 8 mongoc_client_t *client; 9 mongoc_collection_t *collection; 10 bson_error_t error; 11 12 mongoc_init (); 13 14 client = mongoc_client_new ("<connection string URI>"); 15 collection = mongoc_client_get_collection (client, "<database name>", "collection name"); 16 17 // Start example code here 18 19 // End example code here 20 21 mongoc_collection_destroy (collection); 22 mongoc_client_destroy (client); 23 mongoc_cleanup (); 24 25 return EXIT_SUCCESS; 26 }
Índice de campo único
O exemplo seguinte cria um índice ascendente no campo especificado:
bson_t *keys = BCON_NEW ("<field name>", BCON_INT32 (1)); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Para saber mais sobre índices de campo único, consulte o guia Índices de campo único .
Índice composto
O exemplo seguinte cria um índice composto de dois índices ascendentes nos campos especificados:
bson_t *keys = BCON_NEW ("<field name 1>", BCON_INT32 (1), "<field name 2>", BCON_INT32 (1)); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Para saber mais sobre índices compostos, consulte o guia Índices compostos .
Multikey Index
O exemplo a seguir cria um índice de múltiplas chaves ascendente no campo com valor de array especificado:
bson_t *keys = BCON_NEW ("<array field name>", BCON_INT32 (1)); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Para saber mais sobre índices de várias chaves, consulte o guia Índices de várias chaves.
Índice Geoespacial
O exemplo seguinte cria um índice dsphere do 2no campo especificado que contém objetos GeoJSON:
bson_t *keys = BCON_NEW ("<GeoJSON object field name>", BCON_UTF8 ("2dsphere")); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Para saber mais sobre o tipo de dados GeoJSON, consulte Objetos GeoJSON no manual do MongoDB Server .
índice único
O exemplo seguinte cria um índice único ascendente no campo especificado:
bson_t *keys = BCON_NEW ("title", BCON_INT32 (1)); bson_t *opts = BCON_NEW ("unique", BCON_BOOL (true)); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, opts); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); bson_destroy (opts); mongoc_index_model_destroy (index_model);
Índice curinga
O exemplo seguinte cria um índice curinga ascendente na coleção especificada:
bson_t *keys = BCON_NEW ("$**", BCON_INT32 (1)); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Índices clusterizados
O exemplo seguinte cria uma nova coleção com um índice agrupado ascendente no campo _id
:
bson_t *opts = BCON_NEW ("clusteredIndex", "{", "key", "{", "_id", BCON_INT32 (1), "}", "unique", BCON_BOOL (true), "}"); mongoc_database_t *database = mongoc_client_get_database (client, "<database name>"); if (mongoc_database_create_collection (database, "<collection name>", opts, &error)) { printf ("Successfully created collection\n"); } else { fprintf (stderr, "Failed to create collection: %s", error.message); } mongoc_database_destroy (database); bson_destroy (opts);
Text Index
O exemplo seguinte cria um índice de texto no campo de string especificado:
bson_t *keys = BCON_NEW ("<field name>", BCON_UTF8 ("text")); mongoc_index_model_t *index_model = mongoc_index_model_new (keys, NULL); if (mongoc_collection_create_indexes_with_opts (collection, &index_model, 1, NULL, NULL, &error)) { printf ("Successfully created index\n"); } else { fprintf (stderr, "Failed to create index: %s", error.message); } bson_destroy (keys); mongoc_index_model_destroy (index_model);
Excluir um índice.
O exemplo a seguir exclui um índice com o nome especificado:
if (mongoc_collection_drop_index (collection, "<index name>", &error)) { printf ("Successfully dropped index\n"); } else { fprintf (stderr, "Failed to drop index: %s", error.message); }
Para saber mais sobre como remover índices, consulte Remover um índice no guia Trabalhar com índices.
Gerenciamento do índice do Atlas Search
As seções a seguir contêm exemplos de código que descrevem como gerenciar índices de Atlas Search .
Para saber mais sobre os índices do Atlas Search , consulte o guia Índices do Atlas Search .
Criar Índice de Atlas Search
O exemplo seguinte cria um índice do Atlas Search no campo especificado:
bson_t cmd; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "createSearchIndexes" : "%s", "indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ] }), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); bson_free (cmd_str); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully created search index\n"); } else { fprintf (stderr, "Failed to create search index: %s", error.message); } bson_destroy (&cmd);
Para saber mais sobre como criar índices de pesquisa, consulte o guia Criar um índice de pesquisa .
Listar índices de pesquisa
O exemplo abaixo imprime uma lista de índices do Atlas Search na collection especificada:
bson_t pipeline; const bson_t *doc; const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]}); bson_init_from_json (&pipeline, pipeline_str, -1, &error); mongoc_cursor_t *cursor = mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL); while (mongoc_cursor_next (cursor, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (&pipeline); mongoc_cursor_destroy (cursor);
Para saber mais sobre como listar índices do Atlas Search , consulte o guia Listar índices do Atlas Search .
Atualizar índices de pesquisa
O exemplo seguinte atualiza um índice do Atlas Search existente com a nova definição de índice especificada:
bson_t cmd; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "updateSearchIndex" : "%s", "definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); bson_free (cmd_str); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully updated search index\n"); } else { fprintf (stderr, "Failed to create search index: %s", error.message); } bson_destroy (&cmd);
Para saber mais sobre como atualizar índices do Atlas Search , consulte o guia Atualizar um índice do Atlas Search .
Excluir índices Atlas Search
O exemplo seguinte exclui um índice do Atlas Search com o nome especificado:
bson_t cmd; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "dropSearchIndexes" : "%s", "index" : "<index name>" }), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully deleted search index\n"); } else { fprintf (stderr, "Failed to delete search index: %s", error.message); } bson_destroy (&cmd);
Para saber mais sobre como excluir índices do Atlas Search , consulte o guia Excluir um índice do Atlas Search .