2014-09-03 37 views
0

在我的路由器發佈的請求,我解析搜索參數,然後使用數據庫查找使用參數。然而,用戶可以選擇混合和匹配他想使用/不想使用的參數(標題/標籤),所以最終我必須搜索幾個不同的東西,因此存在一些條件確定如下所示的搜索。如何避免有這麼多的貓鼬搜索條件?

router.post('/eventItems/:title', function(req, res) { 
    psuedocode for setting up booleans 

這裏是多個條件句是用來確定哪些搜索

if (tagsShouldBeSearched && searchTitle) 
    { 
    eventItem.find({title: searchTitle, tags: tags}, function(err, data) { 
     var jsondata = JSON.stringify(data); 
     res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user }); 
    }); 
    } 
    else if (tagsShouldBeSearched) 
    { 
    eventItem.find({tags: tags}, function(err, data) { 
     var jsondata = JSON.stringify(data); 
     res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user }); 
    }); 
    } 
    else 
    { 
    eventItem.find({title: searchTitle}, function(err, data) { 
     var jsondata = JSON.stringify(data); 
     res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user }); 
    }); 
    } 

}); 

有沒有更好的方式去這樣做,而無需使用這麼多的條件語句?我也想過使用丟失的不同路由器地址發帖,但也許這太多了?

謝謝!

回答

2

可以使用貓鼬的where

var Query = eventItem.find(); 

if (tagsShouldBeSearched) Query.where({tags: tags}); 
if (titleShouldBeSearched) Query.where({title: searchTitle}); 

Query.exec(function(err, data) { 
    var jsondata = JSON.stringify(data); 
    res.render('eventItems', {events : jsondata, loggedIn: isLoggedIn, matching_events: data, user : req.user }); 
}); 
+0

永遠無法理解的查詢,感謝這樣一個明確的答案構建查詢了 – user3340037 2014-09-03 21:48:07