Índices
Os índices desempenham um papel crucial na otimização do desempenho do banco de dados, e o PyODMongo oferece opções flexíveis para defini-los e gerenciá-los. Esta seção irá guiá-lo sobre como criar índices usando PyODMongo.
Criação simples de índice
A maneira mais simples de criar índices no PyODMongo é usando o Field
, especificando qual campo deve ser indexado.
from pyodmongo import DbModel, Field
from typing import ClassVar
class Product(DbModel):
name: str = Field(index=True)
code: str = Field(index=True, unique=True)
description: str = Field(text_index=True, default_language="english")
price: float
product_type: str
is_available: bool
_collection: ClassVar = "products"
index: bool
: Quando definido comoTrue
, este campo resultará na criação de um índice na coleção usando o mesmo nome do campo.unique: bool
: Quando definido comoTrue
, este campo faz com que o índice criado seja único. Em outras palavras, dois documentos da coleção não podem ter o mesmo valor para este campo.text_index: bool
: Definir este campo comoTrue
indica que o campo deve ser incluído nos índices de texto da coleção. Índices de texto são usados para funcionalidade de pesquisa de texto completo.default_language: str
: O idioma padrão que o MongoDb irá setar no índice de texto da collection. Você pode conferir mais detalhes em Text Search Languages.
Criação avançada de índice
No entanto, se precisar criar índices mais específicos ou complexos, você pode utilizar o IndexModel
do PyMongo. Para fazer isso, defina um atributo de nível de classe _indexes
como uma lista de instâncias de IndexModel
. Você pode encontrar informações detalhadas sobre a criação de índices com PyMongo em sua documentação oficial.
Aqui está um exemplo de como criar índices personalizados no PyODMongo:
from pyodmongo import DbModel
from pymongo import IndexModel, ASCENDING, DESCENDING
from typing import ClassVar
class Product(DbModel):
name: str
code: str
description: str
price: float
product_type: str
is_available: bool
_collection: ClassVar = "products"
_indexes: ClassVar = [
IndexModel([("name", ASCENDING), ("price", DESCENDING)], name="name_and_price"),
IndexModel([("product_type", DESCENDING)], name="product_type"),
]
Neste exemplo, definimos dois índices personalizados para o modelo Product
usando IndexModel
. O primeiro índice é um índice composto do campo name
em ordem crescente e do campo price
em ordem decrescente, denominado 'name_and_price'. O segundo índice está no campo product_type
em ordem decrescente, denominado 'product_type'.
PyODMongo oferece suporte à criação de qualquer estrutura de índice seguindo as diretrizes de estrutura de índice do PyMongo. Essa flexibilidade permite otimizar o desempenho do seu banco de dados de acordo com seus requisitos específicos.