Динамический c запрос для получения ввода от пользователя и выполнения фильтрации из базы данных node.js - PullRequest
0 голосов
/ 04 мая 2020

введите описание изображения здесь Я пытаюсь выбрать столбцы от пользователя, к которому введен пользователь. Хорошо, что столбцы извлекаются, и плохо, что столбцы, которые я применяемые условия не работают. Кто-нибудь может мне помочь? Я хочу запрос, который работает для опции фильтра, как на многих веб-сайтах, чтобы отфильтровать любой продукт или что-то. Newb ie здесь !!!

routes.post('/FilterCandidate',function(req,res){
   var fetchparameter={};
   var dynamicquery={author : req.user.username};
   if(req.user.username){
   if(req.body.ConsultantName){
       fetchparameter["ConsultantName"] =  req.body.ConsultantName;
     }
   if(req.body.Location){
      fetchparameter["Location"] =  req.body.Location;
     }
   if(req.body.JobRole){
  fetchparameter["JobRole"] =  req.body.JobRole;
     }
   if(req.body.Skills){
      fetchparameter["Skills"] =  req.body.Skills.split(',');
     }
   if(req.body.VisaStatus){
      fetchparameter["VisaStatus"] =  req.body.VisaStatus;
     } 
   if(req.body.BillingRate){
      fetchparameter["BillingRate"] =  req.body.BillingRate;
     }
   if(req.body.experience){
      fetchparameter["experience"] = req.body.experience;
     }
   if(req.body.jobtype){
      fetchparameter["jobtype"] = req.body.jobtype;
     }
   if(req.body.Availability){
      fetchparameter["Availability"] = req.body.Availability;
    }
   if(req.body.experience){
      fetchparameter["Salary"] = req.body.Salary;
   }
   if(req.body.Salarytype){
      fetchparameter["Salarytype"] = req.body.Salarytype;
   }
    }


 /* This below code for conditions is not working*/

for(var key in fetchparameter){
   if (key== "Salary" ){
     dynamicquery[key] =  {$gte :fetchparameter[key]};
          }
         if(key == "Skills"){
             dynamicquery [key] = {$in : fetchparameter[key]};
          }
         if(key == "experience"){
            dynamicquery[key] = {$gte :fetchparameter[key]};
          }
         else{
             dynamicquery[key] = fetchparameter[key];
             }
   } 
 console.log(dynamicquery);
    Candidate.aggregate([ {$match : dynamicquery }],(err,docs) =>{
       res.render('FilteredCandidate',{'Candidates' : docs});
       });
 });

Это то, что я получаю, ссылаясь на прикрепленное изображение

1 Ответ

0 голосов
/ 04 мая 2020

я думаю, что вы должны создать массив объектов совпадений, это сделает ваш код более аккуратным и надеясь, что это решит вашу проблему

Пример:

var match = {$and:[]};
if(any condition satisfy){
match.$and.push({}) //condition
}

и самое главное, проверьте, match. $ и массив не должен быть пустым, если он затем удаляет match. $ и. эта процедура поможет вам лучше поддерживать запрос и обеспечивает большую гибкость.

...