sql >> Databasteknik >  >> NoSQL >> MongoDB

Finns det något sätt att atomiskt uppdatera två samlingar i MongoDB?

Det finns många svar här, men jag vill fylla i alla tomrum här:

Finns det något sätt att atomiskt uppdatera två samlingar i MongoDB?

Nej. Atomic uppdatering av två samlingar är faktiskt en transaktion. MongoDB stöder inte transaktioner över samlingar eller ens inom en samling.

MongoDB tillhandahåller flera modifierare som är atomära på ett enda dokument. Så du kan öka flera olika variabler samtidigt ($inc ). Även om det finns vissa begränsningar här, kan du inte utföra två olika operationer på en enskild egenskap.

Finns det något sätt att villkorligt ändra något i en samling baserat på resultaten från en annan samling i en enda gång?

Det finns några dokument här om atomuppdateringar i allmänhet. Men vad du verkligen behöver är en kö och någon form av tvåfas commit eller så behöver du triggers.

Utlösare har ännu inte implementerats, så det är egentligen inte ett alternativ i ditt fall.

Det finns en möjlighet att meddelandet kommer att markeras som läst mellan dessa åtgärder, då kommer jag att minska antalet "olästa" felaktigt.

Vid det här laget har du ett par olika strategier för att få detta att bete sig med en viss nivå av konsekvens. Uppriktigt sagt, baserat på din beskrivning kanske du vill undersöka att bygga en enkel kö som uppdaterar dina totaler.



  1. Hämta ett värde från MongoDB efter dess nyckelnamn

  2. Mongodb aggregering $grupp, begränsa längden på arrayen

  3. MongoDB uppdaterar fält i kapslad array

  4. Mongoose 'statiska' metoder kontra 'instans' metoder