sql >> Base de Datos >  >> NoSQL >> MongoDB

No es posible bloquear un documento mongodb. ¿Qué pasa si necesito?

Oye, la única forma en la que creo ahora es agregar un parámetro de estado y usar la operación findAndModify(), que te permite modificar atómicamente un documento. Es un poco más lento, pero debería funcionar.

Entonces, digamos que agrega un atributo de estado y cuando recupera el documento, cambia el estado de "INACTIVIDAD" a "PROCESANDO". Luego, actualiza el documento y lo guarda de nuevo en la colección, actualizando el estado a "IDLE" nuevamente.

Ejemplo de código:

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

Cambie COLLECTION_NAME e ID_DOCUMENT a un valor adecuado. De forma predeterminada, findAndModify() devuelve el valor anterior, lo que significa que el valor de estado seguirá siendo INACTIVO en el lado del cliente. Entonces, cuando haya terminado con la actualización, simplemente guarde/actualice todo de nuevo.

Lo único que debe tener en cuenta es que solo puede modificar un documento a la vez.

Espero que ayude.