MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

C'è un modo per aggiornare atomicamente due raccolte in MongoDB?

Ci sono molte risposte qui, ma voglio riempire tutti gli spazi vuoti qui:

C'è un modo per aggiornare atomicamente due raccolte in MongoDB?

No. L'aggiornamento atomico di due raccolte è effettivamente una transazione. MongoDB non supporta le transazioni tra raccolte o anche all'interno di una raccolta.

MongoDB fornisce diversi modificatori atomici su un singolo documento. Quindi puoi incrementare diverse variabili contemporaneamente ($inc ). Sebbene ci siano alcune limitazioni qui, non puoi eseguire due diverse operazioni su una singola proprietà.

C'è un modo per modificare condizionalmente qualcosa in una raccolta in base ai risultati di un'altra raccolta in un colpo solo?

Ci sono alcuni documenti qui sugli aggiornamenti atomici in generale. Tuttavia, ciò di cui hai veramente bisogno è una coda e una qualche forma di commit a due fasi o hai bisogno di trigger.

I trigger non sono ancora stati implementati, quindi non è davvero un'opzione nel tuo caso.

C'è la possibilità che il messaggio venga contrassegnato come letto tra queste azioni, quindi ridurrò i conteggi "non letti" in modo errato.

A questo punto, hai un paio di strategie diverse per far sì che questo si comporti con un certo livello di coerenza. Francamente, in base alla tua descrizione, potresti voler indagare sulla creazione di una semplice coda che aggiorni i tuoi totali.