Partilhar via


Usar transações de vários documentos no Azure Cosmos DB para MongoDB

APLICA-SE A: MongoDB

Neste artigo, você criará um aplicativo de shell Mongo que executa uma transação de vários documentos em uma coleção fixa no Azure Cosmos DB para MongoDB com a versão 4.0 do servidor.

O que são transações multidocumentos?

No Azure Cosmos DB para MongoDB, as operações em um único documento são atômicas. As transações com vários documentos permitem que os aplicativos executem operações atômicas em vários documentos. Ele oferece semântica de "tudo ou nada" para as operações. Na confirmação, as alterações feitas dentro das transações são mantidas e, se a transação falhar, todas as alterações dentro da transação são descartadas.

As transações multidocumentos seguem a semântica ACID :

  • Atomicidade: Todas as operações tratadas como uma só
  • Consistência: Os dados confirmados são válidos
  • Isolamento: Isolado de outras operações
  • Durabilidade: Os dados da transação são mantidos quando o cliente é informado disso

Requisitos

As transações de vários documentos são suportadas dentro de uma coleção não fragmentada na API versão 4.0. Não há suporte para transações multidocumentos em coleções ou em coleções fragmentadas na versão 4.0. O tempo limite para transações é de 5 segundos fixos.

Todos os drivers que oferecem suporte ao protocolo wire versão 4.0 ou superior darão suporte ao Azure Cosmos DB para transações multidocumentos do MongoDB.

Executar transações de vários documentos no shell do MongoDB

Nota

Este exemplo não funciona no MongoSH beta (shell) incorporado no MongoDB Compass.

  1. Abra um prompt de comando, vá para o diretório onde o Mongo shell versão 4.0 e superior está instalado:

    cd <path_to_mongo_shell_>
    
  2. Crie um connect_friends.js de script de shell mongo e adicione o seguinte conteúdo

    // insert data into friends collection
    db.getMongo().getDB("users").friends.insert({name:"Tom"})
    db.getMongo().getDB("users").friends.insert({name:"Mike"})
    // start transaction
    var session = db.getMongo().startSession();
    var friendsCollection = session.getDatabase("users").friends;
    session.startTransaction();
    // operations in transaction
    try {
        friendsCollection.updateOne({ name: "Tom" }, { $set: { friendOf: "Mike" } } );
        friendsCollection.updateOne({ name: "Mike" }, { $set: { friendOf: "Tom" } } );
    } catch (error) {
        // abort transaction on error
        session.abortTransaction();
        throw error;
    }
    
    // commit transaction
    session.commitTransaction();
    
  3. Execute o seguinte comando para executar a transação de vários documentos. O host, a porta, o usuário e a chave podem ser encontrados no portal do Azure.

    mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
    

Próximos passos

Explore o que há de novo no Azure Cosmos DB para MongoDB 4.0