2016-04-12 4 views
4

Theres является частью моего приложения, где я могу указать некоторые фильтры для извлечения определенных данных. Но не все фильтры необходимы, поэтому я могу оставить некоторые из них пустыми, и запрос просто не будет их использовать. Как я могу достичь этого в mongoDB. Заранее спасибо.Несколько фильтров в mongoDB

стороне клиента:

 $('#filter').click(function(e){ 
     e.preventDefault(); 
     var filters = JSON.stringify({ Marca : $('#Marca').val(), Modelo : $('#Modelo').val(), Fecha : $('#Fecha').val()}); 

      $.ajax({ 
      type: 'POST', 
      data: filters, 
      url: '/filterFees', 
      contentType: 'application/json' 
      }).done(function(response) { 
       if(response.msg === ''){ 
        filterFees(response.data); 
       } 
       else { 
        alert('Error: ' + response.msg); 
       } 
      }) 
     }) 

node.js (используя монах):

app.post('/filterFees', function(req, res){ 
    var db = req.db; 
    var collection = db.get('Fees'); 

    collection.find({'Marca' : req.body.Marca, 'Modelo' : req.body.Modelo, 'Fecha' : req.body.Fecha, },{},function(err,docs){ 
     res.send((err === null) ? { msg: '', data : docs } : { msg:'error: ' + err }); 
    }); 
}) 

ответ

4

Проверить, если существует значение в фильтрах

var filter = {}, filters; 
if $('#Marca').val() 
    filter.Marca = $('#Marca').val(); 

if $('#Modelo').val() 
    filter.Modelo = $('#Modelo').val(); 

if $('#Fecha').val() 
    filter.Fecha = $('#Fecha').val() 

filters = JSON.stringify(filter); 

и найти данные, в которых фильтры

collection.find(req.body,{},function(err,docs){ 
    res.send((err === null) ? { msg: '', data : docs } : { msg:'error: ' + err }); 
}); 

PS. не знаю, почему вы строгаете параметры вместо отправки объекта

+0

Спасибо большое, это сработало !. Я использую 'JSON.stringify()' из-за 'contentType'. В противном случае я получаю ошибку 400 (Bad Request). – DCruz22