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

Transações do Mongoose.js


Se você realmente precisa ter transações em vários tipos de documentos (em coleções separadas), o meio de conseguir isso é com uma única tabela que armazena as ações a serem executadas.
db.actions.insert(
{ actions: [{collection: 'players', _id: 'p1', update: {$set : {name : 'bob'} } },
            {collection: 'stories', _id: 's1', update: {$set : {location: 'library'} } }], completed: false }, callback);

Esta inserção é atômica, e tudo feito de uma vez. Em seguida, você pode executar os comandos na coleção 'actions' e marcá-los como concluídos ou excluí-los à medida que os conclui, chamando seu retorno de chamada original quando todos estiverem concluídos. Isso só funciona se o loop de processamento de ações for a única coisa que atualiza o db. Claro que você terá que parar de usar mangusto, mas quanto mais cedo você fizer isso, melhor você será de qualquer maneira.