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

Não é possível bloquear um documento mongodb. E se eu precisar?


Ei, a única maneira que eu acho agora é adicionar um parâmetro de status e usar a operação findAndModify(), que permite modificar atomicamente um documento. É um pouco mais lento, mas deve funcionar.

Então, digamos que você adicione um atributo de status e, ao recuperar o documento, altere o status de "IDLE" para "PROCESSING". Em seguida, você atualiza o documento e o salva novamente na coleção, atualizando o status para "IDLE" novamente.

Exemplo de código:
var doc = db.runCommand({
              "findAndModify" : "COLLECTION_NAME",
              "query" : {"_id": "ID_DOCUMENT", "status" : "IDLE"},
              "update" : {"$set" : {"status" : "RUNNING"} }
}).value

Altere COLLECTION_NAME e ID_DOCUMENT para um valor adequado. Por padrão, findAndModify() retorna o valor antigo, o que significa que o valor de status ainda será IDLE no lado do cliente. Então, quando você terminar de atualizar, apenas salve/atualize tudo novamente.

A única coisa que você precisa estar ciente é que você só pode modificar um documento por vez.

Espero que ajude.