Así que tengo una colección de usuarios (mongo DB) que consta de millones de usuarios.
Estoy usando nodejs como backend, angular js como frontend y datatable para mostrar a esos usuarios.
Pero la tabla de datos carga a todos los usuarios en una llamada api que carga más de 1 millón de usuarios.
Esto hace que la respuesta de mi API sea dos lenta.
Solo quiero los primeros 50 usuarios, luego los siguientes 50 y así sucesivamente....
Pila de servidor = nodo js + angular js + mongo DB
Gracias
Si está utilizando una tabla de datos con una gran cantidad de datos, debe considerar usar la funcionalidad de procesamiento del lado del servidor.
El procesamiento del lado del servidor para la tabla de datos se describe aquí: https://datatables.net/manual/server-side
Pero si te da pereza implementar esto en tu servidor, puedes usar terceros como:
Espero que esto ayude.
La forma de resolver que su cliente intente obtener usuarios de su servidor (y base de datos) y luego representarlos en una tabla de datos se realiza mediante la paginación. Hay algunas formas de resolver la paginación que he visto, supongamos que está usando REST.
Una forma de hacer esto es hacer que su API termine con:
/api/users?skip=100&limit=50Es decir, el cliente le preguntará a su servidor por los usuarios (usando la clasificación predeterminada) y omitirá los primeros 100 resultados que encuentre y recuperará los siguientes 50 usuarios.
Otra forma es tener su API así (realmente no me gusta este enfoque):
/api/users?page=5&pageSize=50Es decir, el cliente pasará qué página y cuántos resultados por página quiere obtener. Esto dará como resultado un cálculo del lado del servidor porque necesitaría buscar usuarios de 250-300.
Puedes leer en paginación mucho más en la web.
Habiendo dicho eso, su próximo problema es obtener los usuarios deseados de la base de datos. MongoDB tiene dos funciones para usar skip y limit , por lo que me gusta más la primera API. Puedes hacer la consulta de la siguiente manera:
users.find().skip(50).limit(50)Puede leer más sobre la función de límite aquí y la función de salto aquí
Lo primero que necesita para agregar omitir y limitar su consulta mongo como este Model.find().skip(offset).limit(limit)
luego, lo siguiente que debe hacer es habilitar el procesamiento del lado del servidor en tablas de datos
Si está utilizando la tabla de datos de JavaScript, este violín funcionará para usted http://jsfiddle.net/bababalcksheep/ntcwust8/
Para tablas de datos angulares
http://l-lin.github.io/angular-datatables/archives/#/serverSideProcessing
Otra forma si desea enviar sus propios parámetros
$scope.dtOptions = DTOptionsBuilder.newOptions() .withOption('serverSide', true) .withOption('processing', true) .withOption('ajax', function (data, callback, settings) { // make an ajax request using data.start and data.length $http.post(url, { draw: draw, limit: data.length, offset: data.start, contains: data.search.value }).success(function (res) { // map your server's response to the DataTables format and pass it to // DataTables' callback draw = res.draw; callback({ recordsTotal: res.meta, recordsFiltered: res.meta, draw: res.draw, data: res.data }); }); })obtendrá la longitud por página y el desplazamiento como variable de inicio en el objeto de datos en la sección .withOption('ajax', fun...) y desde allí puede pasar esto en la solicitud de obtención como parámetros, por ejemplo, /route?offset=data. start&limit?data.length o usando la solicitud de publicación en el ejemplo anterior
On hitting next button in table this function will automatically trigger with limit and start and many other datatable related value