MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Existe alguma maneira de atualizar atomicamente duas coleções no MongoDB?


Há muitas respostas aqui, mas quero preencher todas as lacunas aqui:

Existe alguma maneira de atualizar atomicamente duas coleções no MongoDB?

Não. A atualização atômica de duas coleções é efetivamente uma transação. O MongoDB não suporta transações entre coleções ou mesmo dentro de uma coleção.

O MongoDB fornece vários modificadores que são atômicos em um único documento. Então você pode incrementar várias variáveis ​​diferentes de uma só vez ($inc ). Embora existam algumas limitações aqui, você não pode executar duas operações diferentes em uma única propriedade.

Existe uma maneira de alterar condicionalmente algo em uma coleção com base nos resultados de outra coleção de uma só vez?

Existem alguns documentos aqui sobre atualizações atômicas em geral. No entanto, o que você realmente precisa é de uma fila e alguma forma de confirmação de duas fases ou você precisa de gatilhos.

Os gatilhos ainda não foram implementados, portanto, não é realmente uma opção no seu caso.

Existe a possibilidade de que a mensagem seja marcada como lida entre essas ações, então diminuirei as contagens de "não lidas" incorretamente.

Neste ponto, você tem algumas estratégias diferentes para fazer isso se comportar com algum nível de consistência. Francamente, com base em sua descrição, você pode investigar a criação de uma fila simples que atualize seus totais.