Ja detta är designat. MongoDB tillhandahåller uttryckligen inte anslutningar eller transaktioner. Ta bort + Spara är en form av transaktion.
Du har verkligen två lågkomplexitetsalternativ här, båda involverar findAndModify
.
Alternativ #1:en enda samling
Baserat på din beskrivning bygger du i princip en kö med några extra funktioner. Om du använder en enda samling använder du findAndModify
för att uppdatera statusen för varje objekt när det bearbetas.
Tyvärr betyder det att du kommer att förlora detta:...att den "inkommande" samlingen kan hållas väldigt liten och snabb på detta sätt .
Alternativ 2:två samlingar
Det andra alternativet är i princip en tvåfasig commit, som utnyttjar findAndModify
.
Ta en titt på dokumenten för detta här .
När ett objekt har bearbetats i A du ställer in ett fält för att flagga det för radering. Du kopierar sedan objektet till B . En gång kopierad till B du kan sedan ta bort objektet från A .