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

134
Vistas
Filtro MongoDB para cuadro de texto secundario con problema indefinido req.query.value

Me di cuenta con el controlador node, express y mongo si un req.query.x/y... no está definido, ¡me devuelve inválido durante una búsqueda! ejemplo:

 //req.query.name //req.query.email //req.query.city var search = req.query.search; //used in the main serch box //used as secondary textbox filters if(req.query.name){ var name = req.query.name; } if(req.query.email){ var email= req.query.email; } if(req.query.city){ var city= req.query.city; }

durante una búsqueda en varios cuadros de texto, ¡me gustaría eliminar las condiciones if tanto como sea posible!

en .ejs

 //textbox filter <input type="text" name="name"> <input type="text" name="email"> <input type="text" name="city">

en .js

 collection.find({ $text: {$search: search}, or:[{ name:{$regex: '^'+name}, email:{$regex: '^'+email}, city:{$regex: '^'+city}} ] }).toArray(function.......

¡Simplifiqué mucho el código para llegar al punto de la situación (pero no creo que el problema se refiera a $and o $or y su estructura|posición)! sin embargo, si una de las condiciones de búsqueda no está definida , no obtengo el resultado deseado, me gustaría entender si es posible excluir la city el name o el email en caso de que no haya valores asignados. como podria hacer no puedo usar req.query porque coincide con un cuadro de búsqueda más alto . en pocas palabras estas tres casillas estarían filtrando desde un texto req.query.search

Intenté eso pero sin éxito:

 if(name == undefined ){ name ="";} if(email == undefined{ email="";} if(city==undefined){ city="";}

gracias a quien me responda

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede crear su objeto de filtro y luego pasarle sus propiedades en función de si no están definidas o no; puedes intentarlo de esta manera:

 const { search, name, email, city, } = req.query; const filter = { $text: { $search: search }, $or: [], }; if (name) filter.$or.push({ name: new RegExp(name, 'i') }); // The 'i' flag is just for example purpose, that's all if (name) filter.$or.push({ email: new RegExp(email, 'i') }); // same here if (name) filter.$or.push({ city: new RegExp(city, 'i') }); // same here const result = await collection.find(filter);

PD: está usando la palabra clave $texto, no sé si agregó un índice de texto a su definición de esquema Mongoose que le permite usar el operador $texto en sus consultas de búsqueda para buscar todos los campos incluidos en el índice de texto. Puedes leer más sobre esto aquí .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Gracias por el consejo, parece que lo solucioné así (esperemos que no se me escape nada)

 var search = req.query.search; //used in the main serch box //used as secondary textbox filters if(req.query.name){ var name = req.query.name; } else if(name === undefined){name ="";}//add this if(req.query.email){ var email= req.query.email; } else if(email === undefined){email="";}//add this if(req.query.city){ var city= req.query.city; } else if(city === undefined){city="";}//add this

Si hay una mejor manera, ¡que así sea!

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