Find
Find one
O método find_one está disponível nas classes AsyncDbEngine e DbEngine da biblioteca PyODMongo. Este método é usado para recuperar um único objeto do banco de dados com base em critérios especificados.
from pyodmongo import AsyncDbEngine, DbModel
from typing import ClassVar
import asyncio
engine = AsyncDbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
async def main():
query = Product.name == "Box"
box: Product = await engine.find_one(Model=Product, query=query)
asyncio.run(main())
from pyodmongo import DbEngine, DbModel
from typing import ClassVar
engine = DbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
query = Product.name == "Box"
box: Product = engine.find_one(Model=Product, query=query)
Argumentos
Model: DbModel: A classe que herda deDbModela ser utilizada para formar o objeto recuperado do banco de dados.query: ComparisonOperator | LogicalOperator: A consulta usada para filtrar os objetos no banco de dados.raw_query: dict: Uma consulta opcional no formato de dicionário compatível com MongoDB.sort: SortOperator: Um parâmetro opcional que especifica a ordem de classificação dos resultados. Cada tupla na lista contém um nome de campo e uma direção (1para ascendente,-1para descendente). Este parâmetro permite organizar os resultados com base em um ou mais campos, ajudando a organizar os dados recuperados conforme requisitos específicos.raw_sort: dict: Um parâmetro opcional semelhante aosort, mas utiliza um formato de dicionário diretamente compatível com as especificações de classificação do MongoDB. É particularmente útil quando critérios de classificação complexos são necessários e são diretamente suportados pelo MongoDB. Isso pode proporcionar um controle mais direto sobre o processo de classificação na consulta ao banco de dados.populate: bool: Flag booleana que determina se o objeto retornado terá seus campos de relacionamento preenchidos com outros objetos ou conterá apenas oid.as_dict: bool: Um indicador booleano que, quando definido comoTrue, retorna a resposta como um dicionário ao invés de objetos instanciados. Isso é particularmente útil quando um formato leve e serializável é necessário, como para respostas JSON em aplicações web, ou quando o consumidor prefere trabalhar com estruturas de dados básicas ao invés de modelos de objetos complexos.tz_info: timezone: Um parâmetro opcional que especifica a informação de fuso horário para quaisquer camposdatetimenos objetos recuperados. Este parâmetro é crucial ao lidar com registros em diferentes fusos horários e garante que os valores dedatetimesejam corretamente ajustados para o fuso horário especificado. Se não definido, os campos dedatetimeserão retornados no fuso horário padrão do banco de dados ou do servidor de aplicação.
Warning
Se query for passado, raw_query não será considerado.
Find many
O método find_many na biblioteca PyODMongo é semelhante ao método find_one, mas recupera uma lista de objetos que correspondem aos critérios especificados.
from pyodmongo import AsyncDbEngine, DbModel
from typing import ClassVar
import asyncio
engine = AsyncDbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
async def main():
query = (Product.price >= 50) & (Product.price < 100)
products: list[Product] = await engine.find_many(Model=Product, query=query)
asyncio.run(main())
from pyodmongo import DbEngine, DbModel
from typing import ClassVar
engine = DbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
query = (Product.price >= 50) & (Product.price < 100)
products: list[Product] = engine.find_many(Model=Product, query=query)
Argumentos
Além disso, inclui três argumentos extras para controle de paginação:
paginate: bool: Flag booleana que especifica se a resposta deve ser paginada ou uma lista regular.current_page: int: Sepaginate=True, este argumento determina a página de resultados a ser recuperada.docs_per_page: int: Sepaginate=True, este argumento determina o número máximo de objetos por página nos resultados da consulta.
Paginação
Quando você define paginate=True no método find_many do PyODMongo, o resultado da consulta será encapsulado em um objeto do tipo ResponsePaginate. Isso permite a recuperação eficiente e organizada dos resultados da consulta em várias páginas. O objeto ResponsePaginate contém os seguintes atributos:
current_page: int: Indica a página atual do resultado da pesquisa.page_quantity: int: Representa o número total de páginas no resultado da pesquisa.docs_quantity: int: Especifica a contagem total de objetos encontrados na pesquisa.docs: list[Any]: Contém a lista de objetos recuperados para a página atual.
Este mecanismo de paginação é particularmente útil ao lidar com grandes conjuntos de dados, pois permite dividir os resultados em partes gerenciáveis e navegar por eles com facilidade.
from pyodmongo import AsyncDbEngine, DbModel, ResponsePaginate
from typing import ClassVar
import asyncio
engine = AsyncDbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
async def main():
query = (Product.price >= 50) & (Product.price < 100)
response: ResponsePaginate = await engine.find_many(
Model=Product, query=query, paginate=True, current_page=2, docs_per_page=100
)
asyncio.run(main())
from pyodmongo import DbEngine, DbModel, ResponsePaginate
from typing import ClassVar
engine = DbEngine(mongo_uri="mongodb://localhost:27017", db_name="my_db")
class Product(DbModel):
name: str
price: float
is_available: bool
_collection: ClassVar = "products"
query = (Product.price >= 50) & (Product.price < 100)
response: ResponsePaginate = engine.find_many(
Model=Product, query=query, paginate=True, current_page=2, docs_per_page=100
)
Popular
O recurso populate da biblioteca PyODMongo é um mecanismo poderoso para preencher automaticamente todas as referências dentro de um objeto, incluindo referências aninhadas. Este recurso simplifica o trabalho com dados relacionados no MongoDB e permite acessar documentos vinculados sem precisar recuperá-los manualmente, um por um. A funcionalidade populate tem o seguinte comportamento:
- Quando você habilita
populate=Trueemfind_oneoufind_many, o PyODMongo preencherá todas as referências dentro desse objeto. - Se as próprias referências tiverem referências adicionais, o PyODMongo também as preencherá recursivamente, percorrendo todos os níveis de referência.
- Listas de referências também são populadas.
Note
Para garantir um excelente desempenho, o PyODMongo aproveita o poder da estrutura de agregação do MongoDB. Trata-se de uma ferramenta poderosa e eficiente para processar e transformar dados no MongoDB.