Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

138
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!