Cursores y tiempos de espera

Recorre resultados grandes por lotes y pon un plazo a las consultas.

Recorre resultados grandes por lotes con un cursor y pon un plazo a cada consulta con maxTimeMS.

Requisitos

  • Una conexión con un usuario que tenga read sobre la base.

Recorrer por lotes

JavaScript
const cursor = db.pedidos.find({ estado: "pagado" }).batchSize(500);
for await (const pedido of cursor) {
  procesar(pedido);
}

El driver pide cada lote siguiente con getMore al mismo nodo que abrió el cursor.

Poner un plazo

JavaScript
db.pedidos.find({ estado: "pagado" }).maxTimeMS(2000);

Comprobar

Una consulta que pasa del plazo falla con MaxTimeMSExpired (50) y deja de ocupar el nodo.

Problemas frecuentes

  • getMore falla con CursorNotFound (43) porque el cursor caducó, se cerró o se pidió a otro nodo.

Ver también