Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Dados de modelo para operações atômicas

Nesta página

  • Padrão

Embora o MongoDB ofereça suporte a transações de vários documentos para conjuntos de réplicas (a partir da versão 4.0) e clusters fragmentados, para muitos cenários, o modelo de dados desnormalizado, conforme discutido nesta página, continuará sendo ideal para seus dados e casos de uso.

No MongoDB, uma operação de gravação em um único documento é atômica. Para campos que devem ser atualizados juntos, a incorporação dos campos no mesmo documento garante que os campos possam ser atualizados atomicamente.

Por exemplo, considere uma situação em que você precisa manter informações sobre livros, incluindo o número de cópias disponíveis para checkout, bem como as informações atuais de checkout.

As cópias disponíveis do livro e as informações de finalização da compra devem estar sincronizadas. Dessa forma, incorporar o campo available e o campo checkout no mesmo documento garante que você possa atualizar os dois campos atomicamente.

{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}

Em seguida, para atualizar com novas informações de checkout, você pode utilizar o método db.collection.updateOne() para atualizar atomicamente o campo available e o campo checkout :

db.books.updateOne (
{ _id: 123456789, available: { $gt: 0 } },
{
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
)

A operação retorna um documento que contém informações sobre o status da operação:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

O campo matchedCount mostra que 1 documento correspondeu à condição de atualização e modifiedCount mostra que a operação atualizou 1 documento.

Se nenhum documento corresponder à condição de atualização, então matchedCount e modifiedCount seriam 0 e indicariam que você não poderia fazer o check-out do livro.

← Contextos de aplicação específicos do modelo

Nesta página