Menu Docs

Página inicial do DocsDesenvolver aplicaçõesDrivers PythonPyMongo

Bancos de dados e coleções

Nesta página

  • Visão geral
  • Acessar um banco de dados
  • Acessar uma coleção
  • Criar uma coleção
  • Obter uma lista de coleções
  • Excluir uma coleção
  • Configurar operações de leitura e escrita
  • Conjuntos de tags
  • LocalThreshold
  • Solução de problemas
  • AutoReconnect Erro
  • Documentação da API

Neste guia, você pode aprender como usar bancos de dados e coleções MongoDB com PyMongo.

O MongoDB organiza os dados em uma hierarquia dos seguintes níveis:

  • Bancos de dados: o nível mais alto de organização de dados em uma instância do MongoDB.

  • Collections: o MongoDB armazena documentos em collections. Elas são análogas às tabelas do banco de dados relacional.

  • Documentos: contêm dados literais, como string, números, datas e outros documentos incorporados.

Para obter mais informações sobre os tipos e estrutura de campos de documentos, consulte o guia Documentos no manual do MongoDB Server .

Acesse um banco de dados utilizando acesso de estilo de dicionário na sua instância do MongoClient .

O exemplo a seguir acessa um banco de dados chamado "test_database":

database = client["test_database"]

Acesse uma coleção usando o acesso no estilo de dicionário em uma instância do seu banco de dados.

O exemplo a seguir acessa uma coleção chamada "test_collection":

database = client["test_database"]
collection = database["test_collection"]

Dica

Se o nome da coleção fornecido ainda não existir no banco de dados, o MongoDB criará implicitamente a coleção quando você inserir os dados pela primeira vez nela.

Use o método create_collection() para criar explicitamente uma coleção em um banco de MongoDB database.

O exemplo a seguir cria uma collection chamada "example_collection":

database = client["test_database"]
database.create_collection("example_collection")

Você pode especificar opções de collection, como tamanho máximo e regras de validação de documento, passando-as como argumentos de palavra-chave. Para obter uma lista completa de parâmetros opcionais, consulte a documentação da API create_collection().

Você pode executar query de uma lista de coleções em um banco de dados ligando para o método list_collections() . O método retorna um cursor contendo todas as collections no banco de dados e seus metadados associados.

O exemplo seguinte chama o método list_collections() e itera sobre o cursor para imprimir os resultados:

collection_list = database.list_collections()
for c in collection_list:
print(c)

Para executar query somente dos nomes das collections no banco de dados, chame o método list_collection_name() da seguinte forma:

collection_list = database.list_collection_names()
for c in collection_list:
print(c)

Para obter mais informações sobre a iteração em um cursor, consulte Acessar dados de um cursor.

Você pode excluir uma coleção do banco de dados utilizando o método drop_collection() .

O exemplo a seguir exclui a collection test_collection :

collection = database["test_collection"];
collection.drop();

Aviso

Eliminar uma coleção exclui todos os dados da coleção

Descartar uma collection do seu banco de dados exclui permanentemente todos os documentos e todos os índices dessa collection.

Solte uma coleção somente se os dados nela não forem mais necessários.

Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.

Por padrão, os bancos de dados herdam essas configurações da instância MongoClient e as collections as herdam do banco de dados. No entanto, você pode alterar essas configurações em seu banco de dados ou coleção usando um dos seguintes métodos:

  • get_database(): obtém o banco de dados e aplica a preferência de leitura, a preocupação de leitura e a preferência de gravação do cliente.

  • database.with_options(): Obtém o banco de dados e aplica sua preferência de leitura, preocupação de leitura e preferência de gravação atuais.

  • get_collection(): Obtém a coleção e aplica sua preferência de leitura, preocupação de leitura e preferência de gravação atuais.

  • collection.with_options(): Obtém a coleção e aplica a preferência de leitura, preocupação de leitura e preferência de gravação do banco de dados.

Para alterar as configurações de leitura ou gravação com os métodos anteriores, chame o método e passe o nome da coleção ou do banco de dados e a nova preferência de leitura, preocupação de leitura ou preferência de gravação.

O exemplo a seguir mostra como alterar a read preference, read concern e write preference de um banco de dados chamado test-database com o método get_database() :

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

O exemplo seguinte mostra como alterar as configurações de leitura e escrita de uma coleção chamada test-collection com o método get_collection() :

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

O exemplo seguinte mostra como alterar as configurações de leitura e escrita de uma coleção chamada test-collection com o método with_options() :

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

Dica

Para ver os tipos de preferências de leitura disponíveis no ReadPreference enum , consulte a documentação da API.

Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :

No MongoDB Server, você pode aplicar marcações de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério de sua escolha. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.

Por padrão, o PyMongo ignora as tags ao escolher um membro para ler. Para instruir o PyMongo a preferir determinadas tags, passe-as como parâmetro para sua classe de read preference construtor.

No exemplo de código a seguir, o conjunto de tags passado para o parâmetro read_preference instrui o PyMongo a preferir leituras do centro de dados de Nova York ('dc': 'ny') e a voltar para o centro de dados de São Francisco ('dc': 'sf'):

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

Se vários membros do conjunto de réplicas corresponderem à read preference e aos conjuntos de tags especificados, o PyMongo lerá dos membros do conjunto de réplicas mais próximos, escolhidos de acordo com o tempo de ping.

Por padrão, o driver usa somente os membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, passe a opção localThresholdMS para o construtor MongoClient() .

O exemplo a seguir especifica um limite local de 35 milissegundos:

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

No exemplo anterior, o PyMongo distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.

Observação

O PyMongo ignora o valor de localThresholdMS ao se comunicar com um conjunto de réplicas por meio de uma instância mongos . Nesse caso, use a opção de linha de comando localThreshold .

Você recebe este erro se especificar tag-sets em sua preferência de leitura e o MongoDB não conseguir encontrar membros do conjunto de réplicas com as tags especificadas. Para evitar esse erro, inclua um dicionário vazio ({}) no final da lista de conjuntos de tags. Isso instrui o PyMongo a ler de qualquer membro que corresponda ao modo de referência de leitura quando não conseguir encontrar tags correspondentes.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

← Limitar o tempo de execução do servidor MongoDB