Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Transações e Operações

O MongoDB oferece a capacidade de usar transações em diversas operações, coleções, bancos de dados, documentos e fragmentos.

As seguintes operações de leitura/gravação são permitidas nas transações:

Método
Comando
Observação

Excluindo as seguintes expressões do operador de query:

O método utiliza o estágio de aggregation $match para a query e estágio de aggregation $group com uma expressão $sum para executar a contagem.

Disponível em coleções não partilhadas.

Para coleções fragmentadas, use o pipeline de agregação com o estágio $group. Consulte Operação Distinta.

Se a operação de atualização ou substituição for executada com upsert: true em uma coleção inexistente, a coleção será implicitamente criada.

Para obter mais detalhes,consulte Operações de administração.

Se for executado em uma coleção inexistente, a coleção será criada implicitamente.

Para obter mais detalhes,consulte Operações de administração.

Se for executado em uma coleção inexistente, a coleção será criada implicitamente.

Para obter mais detalhes,consulte Operações de administração.

Se for executado em uma coleção inexistente, a coleção será criada implicitamente.

Para obter mais detalhes,consulte Operações de administração.

Observação

Atualizações nos valores da chave de shard

Você pode atualizar o valor da chave do fragmento de um documento (a menos que o campo da chave do fragmento seja o campo imutável _id) emitindo operações de atualização/encontro de documento único e modificação em uma transação ou como escrita repetível. Para obter detalhes, consulte Alterar o valor chave do fragmento de um documento.

Para realizar uma operação de contagem dentro de uma transação, use o estágio de agregação $count ou o estágio de agregação $group (com uma expressão $sum de agregação.

Os drivers do MongoDB fornecem uma API de collection countDocuments(filter, options) como um método auxiliar que usa o $group com uma expressão $sum para executar uma contagem.

mongosh A fornece o método assistente db.collection.countDocuments() $group que usa $sum o com uma expressão para executar uma contagem.

Para realizar uma operação distinta dentro de uma transação:

  • Para coleções não fragmentadas, você pode usar o db.collection.distinct() método /o distinct comando , bem como o pipeline de agregação com o estágio $group .

  • Para coleções fragmentadas, você não pode utilizar o método db.collection.distinct() ou o comando distinct.

    Para localizar os valores distintos para uma coleção fragmentada, use o pipeline de agregação com o estágio $group. Por exemplo:

    • Em vez de db.coll.distinct("x"), use

      db.coll.aggregate([
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])
    • Em vez de db.coll.distinct("x", { status: "A" }), use:

      db.coll.aggregate([
      { $match: { status: "A" } },
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])

    O pipeline retorna um cursor para um documento:

    { "distinctValues" : [ 2, 3, 1 ] }

    Itere o cursor para acessar o documento de resultados.

Você pode criar coleções e índices em transações. Para obter detalhes, consulte Criar coleções e índices em uma transação. As coleções utilizadas em uma transação podem estar em diferentes bancos de dados.

Observação

Você não pode criar uma nova coleta em transações de gravação entre fragmentos. Por exemplo, se você gravar em uma coleta existente em um fragmento e criar implicitamente uma coleta em um fragmento diferente, o MongoDB não poderá executar ambas as operações na mesma transação.

Você pode criar coleção e índices dentro de uma transação distribuída se a transação não for uma transação de gravação cross-fragmento.

Comando
Método
Notas

O índice a criar tem de estar numa recolha não existente, caso em que a recolha é criada como parte da operação, ou numa nova recolha vazia criada anteriormente na mesma transação.

Observação

Para a criação explícita de uma collection ou de um índice em uma transação, o nível de read concern da transação deve ser "local".

Para obter mais informações sobre como criar coleções e índices em uma transação, consulte Criar coleções e índices em uma transação.

Você também pode criar implicitamente uma coleção por meio das seguintes operações de gravação em uma coleção não existente:

Método executado em uma coleção inexistente
Comando Executar em collection inexistente

findAndModify com upsert: true

update com upsert: true

db.collection.bulkWrite() com inserção ou operações do upsert:true
Várias operações em massa com inserção ou operações do upsert:true

Para outras operações CRUD permitidas em transações, consulte Operações CRUD.

Para obter mais informações sobre como criar coleções e índices em uma transação, consulte Criar coleções e índices em uma transação.

Comandos informativos, como hello, buildInfo, connectionStatus (e seus métodos de ajuda) são permitidos em transações; no entanto, eles não podem ser a primeira operação na transação.

As seguintes operações não são permitidas nas transações:

  • Criação de nova coleta em transações de gravação entre fragmentos. Por exemplo, se você gravar em uma coleta existente em um fragmento e criar implicitamente uma coleta em um fragmento diferente, o MongoDB não poderá executar ambas as operações na mesma transação.

  • Criação explícita de coleções, pordb.createCollection() exemplo, método e índices, pordb.collection.createIndexes() db.collection.createIndex() exemplo, métodos e, ao usar um nível de preocupação de "local" leitura diferente.

  • Os comandos listCollections e listIndexes e seus métodos de auxiliar.

  • Outras operações não CRUD e não informacionais, tais como createUser, getParameter, count e seus assistentes.

  • Operações paralelas. Para atualizar vários namespaces simultaneamente, considere usar o comando bulkWrite.

  • Grava para coleções limitadas.

  • Usando preocupação de leitura "snapshot" ao ler de uma coleção limitada. (Começando no MongoDB 5.0)

  • Leituras/gravações em coleções nos bancos de dados config, admin ou local.

  • Grava para system.* coleções.

  • Utilizando explain ou comandos semelhantes para retornar o plano de query da operação suportada.

  • Chamando getMore em cursores criados fora de uma transação ou chamando getMore fora de uma transação em cursores criados dentro de uma transação.

  • Especificar o comando killCursors como a primeira operação em uma transação.

    Observação

    Se você executar o comando killCursors dentro de uma transação, o servidor interromperá imediatamente os cursores especificados. Não espera que a transação seja confirmada.