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 aobj.id
será atualizado. Seobj
não tiver umid
, 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 comoTrue
, o banco de dados irá inserir o documento se nenhum documento correspondente for encontrado. SeFalse
, 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 comoTrue
, 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 dematched_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.