Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Transações e Operações

Nesta página

  • Operações suportadas em transações multidocumentos
  • Operações CRUD
  • Operação de contagem
  • Operação Distinta
  • Operações de administração
  • Operações Informativas
  • Operações Restritas

Para transações:

  • Para cursores criados fora de uma transação, você não pode chamar getMore dentro da transação.

  • Para cursores criados em uma transação, não é possível chamar getMore fora da transação.

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

Método
Comando
Observação
db.collection.aggregate()

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 collections fragmentadas, use o aggregation pipeline 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 collection não existente, a collection será implicitamente criada.

No MongoDB 4.2 e anteriores, se upsert: true, a operação deve ser executada em uma collection existente.

Dica

Veja também:

Se for executado em uma collection inexistente, a collection será implicitamente criada.

No MongoDB 4.2 e anteriores, a operação deve ser executada em uma collection existente.

Se for executado em uma collection inexistente, a collection será implicitamente criada.

No MongoDB 4.2 e anteriores, a operação deve ser executada em uma collection existente.

Se for executado em uma collection inexistente, a collection será implicitamente criada.

No MongoDB 4.2 e anteriores, a operação deve ser executada em uma collection existente.

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. A API count() está obsoleta.

mongosh fornece o método auxiliar db.collection.countDocuments() que usa o $group com uma expressão $sum 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ção e indexes dentro de uma transaction distribuída se a transaction não for uma transação de escrita de estilhaço cruzado.

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 upsert:true operações
Vários Métodos de operação 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:

← Considerações de produção ( cluster fragmentado)