Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
Problema de velocidad y también error de memoria al consultar en Mongo

Tengo una tabla que contiene más de 100.000 registros. Servidor: node.js/express.js. DB: mongo En el cliente, se implementa una tabla con un buscapersonas. Se solicitan 10 registros cada vez.

Cuando había 10.000 registros, por supuesto, todo funcionaba más rápido, pero ahora había un problema con la velocidad y no solo.

Mi agregación:

 import { concat } from 'lodash'; ... let query = [{$match: {}}]; query = concat(query, [{$sort : {createdAt: -1}}]); query = concat(query, [ {$skip : (pageNum - 1) * perPage}, // 0 {$limit : perPage} // 10 ]); return User.aggregate(query) .collation({locale: 'en', strength: 2}) .then((users) => ...;

2 casos:

  1. primera búsqueda muy lenta

  2. cuando hago clic en la última página me sale el error:

    MongoError: la ordenación excedió el límite de memoria de 104857600 bytes, pero no optó por la ordenación externa. Cancelación de la operación. Pase allowDiskUse:true para participar.

Por favor, dígame, estoy construyendo la agregación incorrectamente, o hay un problema con la memoria en el servidor como dice el error y se necesitan configuraciones nginx adicionales (otra persona está involucrada en esto) o el problema es complejo, o tal vez algo más ¿en total?

Agregado:

Noté que el índice no se usa al ordenar, aunque debería usarse.

ingrese la descripción de la imagen aquí

agregación para ejecutar console.log =>

 [ { "$match": {} }, { "$lookup": { ... } }, { "$project": { ..., createdAt: 1, ... } }, { "$match": {} }, { "$sort": { "createdAt": -1 } }, { "$skip": 0 }, { "$limit": 10 } ]

Gracias por cualquier respuesta y lo siento mi inglés :)

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sí dice que tiene un límite de memoria, lo cual tiene sentido, considerando que está tratando de filtrar a través de 100,000 solicitudes. Intentaría usar return User.aggregate(query, { allowDiskUse: true }) //etc , y ver si eso soluciona su problema.

Si bien esta no es la documentación sobre el controlador Node.js específicamente, este enlace resume lo que hace la opción allowDiskUse (o, en resumen, permite que MongoDB supere el límite de memoria de 100 MB y utiliza el almacenamiento de su sistema para almacenar temporalmente cierta información mientras realiza la consulta).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda