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

498
Vistas
Node.js cómo usar mongoose para filtrar y paginar

Obtuve todos los datos con éxito en mi código node.js usando Profile.find() , pero cuando quiero agregar un filtro en la API, aparece el error 500.

Perfil.js

 const mongoose = require('mongoose'); const Schema = mongoose.Schema; //Create Schema const ProfileSchema = new Schema({ type: { type: String, }, description: { type: String, }, cash:{ type: String, required: true, } }) module.exports = Profile = mongoose.model("profile",ProfileSchema);

api.js

 const router = express.Router(); const Profile = require('../../models/Profile'); router.get("/",passport.authenticate('jwt',{session:false}),(req, res) => { Profile.find().then(profiles => { res.json(profiles) })//works }) router.get("/",passport.authenticate('jwt',{session:false}),(req, res) => { var condition = {'cash' : '5000'}; Profile.find(condition,function(err,res){//error for this res.json(res) }) })

Soy nuevo en mongoose y no estoy seguro de cómo hacer el filtro y la paginación de mi código. Agradezco cualquier tipo de ayuda.

Actualizar

Gracias a @Amila Senadheera, finalmente encontré la solución para filtrar y paginar usando el siguiente código:

 var condition = { cash: '5000' }; Profile.find(condition).skip(1).limit(10).then(profiles => { res.json(profiles) })

Para usar la agregación, funciona como se muestra a continuación:

 router.post( "/", passport.authenticate("jwt", { session: false }), async (req, res) => { // page index let pageIndex = 1; // profiles per page let pageSize = 10; if (req.body.pageIndex !== null || req.body.pageIndex !== "undefined") { pageIndex = req.body.pageIndex; } if (req.body.pageSize !== null || req.body.pageSize !== "undefined") { pageSize = req.body.pageSize; } let condition = { description: "1" }; try { const getAllProfile = await Profile.aggregate([{ $facet: { data:[ { $match: condition }, { $skip: (pageIndex - 1) * pageSize }, { $limit: pageSize }, ], totalCount:[ { $match: condition }, { $count: 'totalCount' } ] } }]) ; res.json(getAllProfile); } catch (error) { res.status(404).json(error); } } );
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La función de búsqueda solo puede aceptar query y projection como argumentos. No se le permite dar una devolución de llamada como argumento. then debe estar encadenado a la Promise devuelta por find .

Prueba así

 var condition = {'cash' : '5000'}; Profile.find(condition).then(profiles => { res.json(profiles) });

Perfiles con paginación.

puede usar el marco de agregación de MongoDB para eso (lo que permitirá obtener información adicional como las entradas totales y el recuento de las entradas en la página actual (la última página puede tener un número menor que el límite de páginas)). Debe enviar start y limit como el cuerpo de la solicitud.

 router.get( "/", passport.authenticate("jwt", { session: false }), async (req, res) => { // page index let start = 0; // profiles per page let limit = 10; if (req.body.start !== null || req.body.start !== "undefined") { start = req.body.start; } if (req.body.limit !== null || req.body.limit !== "undefined") { limit = req.body.limit; } let condition = { cash: "5000" }; try { const aggregatedData = await Profile.aggregate([ { $facet: { data: [ { $match: condition }, { $project: { type: 1, description: 1, cash: 1 } }, { $skip: start * limit }, { $limit: limit } ], metaData: [ { $group: { _id: null, count: { $sum: 1 } } } ] } } ]); return res.status(200).json({ data: aggregatedData[0].data, metaData: { total: aggregatedData[0].metaData[0].count, start: start } }); } catch (error) { return res.status(500).json({ error: error }); } } );
about 4 years ago · Juan Pablo Isaza 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