Pular para conteúdo

Save

Save

O método save faz parte das classes AsyncDbEngine e DbEngine no PyODMongo. É responsável por salvar ou atualizar documentos no banco de dados.

from pyodmongo import AsyncDbEngine, DbModel, DbResponse
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"


box = Product(name="Box", price="5.99", is_available=True)


async def main():
    response: DbResponse = await engine.save(box)


asyncio.run(main())
from pyodmongo import DbEngine, DbModel, DbResponse
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"


box = Product(name="Box", price="5.99", is_available=True)

response: DbResponse = engine.save(box)

Se o resultado do método save corresponder à criação de um novo documento no banco de dados, a instância do objeto receberá os atributos id, created_at e updated_at.

Argumentos

  • obj: Any: Objeto a ser salvo no banco de dados.
  • query: ComparisonOperator | LogicalOperator = None: Consulta usada para atualizar documentos correspondentes. Caso não seja fornecido, o documento no banco de dados com _id igual a obj.id será atualizado. Se obj não tiver um id, um novo documento será criado no banco de dados.
  • raw_query: dict = None: Consulta no formato aceito pelo MongoDB. Este parâmetro permite especificar uma consulta personalizada para atualização de documentos.
  • upsert: bool = True: Se definido como True, o banco de dados irá inserir o documento se nenhum documento correspondente for encontrado. Se False, o documento será atualizado apenas se já existir no banco de dados.

Warning

Se query for passado, raw_query não será considerado.

Note

Por trás dos panos, o PyODMongo usa a operação update_many com upsert=True, o que significa que ele pode adicionar ou atualizar um ou vários documentos.

Save all

Além do método save, PyODMongo fornece o método save_all, que permite salvar uma lista de objetos. Este método é particularmente útil quando você precisa salvar vários documentos.

from pyodmongo import AsyncDbEngine, DbModel, DbResponse
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"


class User(DbModel):
    name: str
    email: str
    password: str
    _collection: ClassVar = "users"


obj_list = [
    Product(name="Box", price="5.99", is_available=True),
    Product(name="Ball", price="6.99", is_available=True),
    User(name="John", email="john@email.com", password="john_pwd"),
]


async def main():
    response: dict[str, DbResponse] = await engine.save_all(obj_list)


asyncio.run(main())
from pyodmongo import DbEngine, DbModel, DbResponse
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"


class User(DbModel):
    name: str
    email: str
    password: str
    _collection: ClassVar = "users"


obj_list = [
    Product(name="Box", price="5.99", is_available=True),
    Product(name="Ball", price="6.99", is_available=True),
    User(name="John", email="john@email.com", password="john_pwd"),
]


response: dict[str, DbResponse] = engine.save_all(obj_list)

Resposta do save

O método save no PyODMongo retorna um objeto DbResponse que fornece informações sobre o resultado da operação de salvamento. Este objeto contém vários atributos que dão informações sobre como a operação de salvamento afetou o banco de dados.

O valor de retorno de um método save_all é um dicionário onde as chaves são os nomes das coleções e os valores são objetos DbResponse.

Atributos de DbResponse

  • acknowledged: bool: Um valor booleano indicando se a operação foi reconhecida pelo servidor MongoDB. Se a operação foi reconhecida, este atributo é definido como True, indicando que o servidor reconheceu e processou a solicitação de salvamento.

  • deleted_count: int: Um inteiro que representa o número de documentos que foram excluídos do banco de dados como parte da operação de exclusão.

  • inserted_count: int: Um inteiro que indica o número de documentos que foram inseridos com sucesso no banco de dados durante a operação de inserção.

  • matched_count: int: Um inteiro que representa o número de documentos no banco de dados que corresponderam à consulta ou critérios especificados durante a operação de salvamento. Este valor indica quantos documentos existentes foram atualizados como parte da operação de salvamento.

  • modified_count: int: Um inteiro que representa o número de documentos no banco de dados que foram realmente modificados durante a operação de salvamento. Este valor geralmente é igual ou um subconjunto de matched_count e indica quantos documentos tiveram seus campos alterados.

  • upserted_count: int: Um inteiro que representa o número de documentos que foram inseridos como resultado de uma operação upsert. Isso ocorre quando um documento não existe e é criado durante o processo de atualização.

  • upserted_ids: dict[int, Id]: Um dicionário que mapeia o índice dos documentos inseridos para seus novos IDs únicos. Este atributo é útil para rastrear quais documentos foram criados durante uma operação upsert.