Sim, isso é por design. O MongoDB explicitamente não fornece junções ou transações. Remover + Salvar é uma forma de transação.
Você realmente tem duas opções de baixa complexidade aqui, ambas envolvem
findAndModify
. Opção nº 1:uma única coleção
Com base na sua descrição, você está basicamente construindo uma fila com alguns recursos extras. Se você aproveitar uma única coleção, use
findAndModify
para atualizar o status de cada item durante o processamento. Infelizmente, isso significa que você perderá isso:...que a coleção "incoming" pode ser mantida muito pequena e rápida dessa maneira .
Opção nº 2:duas coleções
A outra opção é basicamente um commit de duas fases, aproveitando
findAndModify
. Dê uma olhada nos documentos para este aqui .
Quando um item é processado em A você define um campo para sinalizá-lo para exclusão. Você então copia esse item para B . Uma vez copiado para B você pode remover o item de A .