Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo

Bancos de dados e coleções

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 denominado 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 denominada 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 coleção chamada example_collection. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

database = client["test_database"]
database.create_collection("example_collection")
database = client["test_database"]
await 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().

As coleções de séries temporais armazenam eficientemente sequências de medições durante um período de tempo. O exemplo a seguir cria uma coleção de séries temporais chamada example_ts_collection na qual o campo de tempo dos documentos é chamado timestamp. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

database = client["test_database"]
database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})
database = client["test_database"]
await database.create_collection("example_ts_collection", timeseries={"timeField": "timestamp"})

Para obter mais informações sobre o uso de dados de série temporal com o PyMongo, consulte o guia Dados de série temporal .

Você pode criar uma collection limitada que não pode ultrapassar um tamanho de memória ou contagem de documento especificado. O exemplo a seguir cria uma collection limitada chamada example_capped_collection que tem um tamanho máximo de 1000 bytes. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

database = client["test_database"]
database.create_collection("example_capped_collection", capped=True, size=1000)
database = client["test_database"]
await database.create_collection("example_capped_collection", capped=True, size=1000)

Para saber mais sobre coleções limitadas, consulte Coleções limitadas no manual do MongoDB Server .

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. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

database = client["test_database"]
collection_list = database.list_collections()
for c in collection_list:
print(c)
database = client["test_database"]
collection_list = await 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)
collection_list = await database.list_collection_names()
async 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. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

collection = database["test_collection"]
collection.drop()
collection = database["test_collection"]
await 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.

Se seu aplicação usar o Python 3.5 ou posterior, você poderá adicionar dicas de tipo, conforme descrito em PEP 484, ao seu código. As dicas de tipo denotam os tipos de dados de variáveis, parâmetros e valores de retorno de função, e a estrutura de documentos. Alguns IDEs podem usar dicas de tipo para verificar erros de tipo seu código e sugerir opções apropriadas para a conclusão do código.

Observação

TypedDict no Python 3.7 e anteriores

A classe TypedDict está no módulo typing, que está disponível somente no Python 3.8 e posterior. Para usar a TypedDict classe em versões anteriores do Python, instale o pacote digitando_extensões.

Se todos os documentos em um banco de dados corresponderem a um esquema bem definido, você poderá especificar uma dica de tipo que usa uma classe Python para representar a estrutura dos documentos. Ao incluir essa classe na dica de tipo do seu objeto Database, você pode garantir que todos os documentos armazenados ou recuperados tenham a estrutura necessária. Isso fornece uma verificação de tipo e conclusão de código mais precisas do que o tipo Dict[str, Any] padrão.

Primeiro, defina uma classe para representar um documento do banco de dados. A classe deve herdar da classe TypedDict e deve conter os mesmos campos que os documentos no banco de dados. Depois de definir sua classe, inclua seu nome como tipo genérico para a dica de tipo Database.

O exemplo a seguir define uma classe Movie e a utiliza como tipo genérico para uma dica de tipo Database. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

from typing import TypedDict
from pymongo import MongoClient
from pymongo.database import Database
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database: Database[Movie] = client["test_database"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.asynchronous.database import Database
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database: Database[Movie] = client["test_database"]

Adicionar um tipo genérico a uma dica de tipo do Collection é semelhante a adicionar um tipo genérico a uma dica de tipo do Database. Primeiro, defina uma classe que herda da classe TypedDict e representa a estrutura dos documentos na collection. Em seguida, inclua o nome da classe como o tipo genérico para a dica de tipo Collection, conforme mostrado no exemplo a seguir. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:

from typing import TypedDict
from pymongo import MongoClient
from pymongo.asynchronous.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: MongoClient = MongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]
from typing import TypedDict
from pymongo import AsyncMongoClient
from pymongo.collection import Collection
class Movie(TypedDict):
name: str
year: int
client: AsyncMongoClient = AsyncMongoClient()
database = client["test_database"]
collection: Collection[Movie] = database["test_collection"]

Se você não adicionar uma anotação de tipo para seu objeto MongoClient, seu verificador de tipo poderá mostrar um erro semelhante ao seguinte:

from pymongo import MongoClient
client = MongoClient() # error: Need type annotation for "client"

A solução é anotar o objeto MongoClient como client: MongoClient ou client: MongoClient[Dict[str, Any]].

Se você especificar MongoClient como uma dica de tipo, mas não incluir tipos de dados para o documento, as chaves e os valores, seu verificador de tipo poderá mostrar um erro semelhante ao seguinte:

error: Dict entry 0 has incompatible type "str": "int";
expected "Mapping[str, Any]": "int"

A solução é adicionar a seguinte dica de tipo ao seu objeto MongoClient :

``client: MongoClient[Dict[str, Any]]``

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:

Voltar

Pool de Conexões

Nesta página