Estoy buscando implementar una "reserva de sauna" con mongodb. Para esto, quiero tener una colección de reservas con cada reserva que contenga una hora de inicio y una duración en minutos.
ANTES de insertar una reserva previa solicitud, me gustaría asegurarme de que su inicio + duración no entre en conflicto con ninguna otra reserva que ya esté en la colección.
No puedo pensar en una forma de implementar esto en una consulta (si eso es posible), así que supongo que tengo que:
recuperar colección (solo las reservas para hoy)
repita la respuesta de la primera consulta y asegúrese de que la reserva que quiero insertar sea válida, no conflictiva. Entonces necesito
guardar la reserva.
SIN EMBARGO, ¿cómo me aseguro de que entre el paso 1 y el 3 no haya otra sesión que haya insertado una reserva que entre en conflicto con la actual?
Hacer los pasos 1 a 3 a ciegas en el código seguramente resultaría en datos rotos/reservas en conflicto.
¿Alguien tiene una idea de cómo resolver esto con mongodb?
Una solución es utilizar un sistema de cola FIFO (primero en entrar, primero en salir). Cada vez que tenga una nueva reserva, entrará en una cola. Luego, el sistema extraerá los elementos del frente de la cola uno por uno y solo procesará uno a la vez. en su caso, el proceso serán los pasos 1 a 3. También puede mejorar los pasos 1 y 2 solo consultando mongoDB utilizando una búsqueda donde la hora de inicio de la cita y la hora de finalización de la cita no coincidan con otra cita. De esta manera, no necesita realizar una operación costosa como recuperar TODAS las reservas para hoy e iterar a través de ellas.