Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

135
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda