如何避免拥有如此多的猫鼬搜索条件?

时间:2014-09-03 19:11:36

标签: node.js mongodb express mongoose

在我的路由器中发布请求,我解析搜索参数,然后使用参数使用db find。但是,用户可以选择混合和匹配他想要使用/不想使用的参数(标题/标签),因此最终我必须搜索几个不同的东西,因此有几个条件确定搜索,如下所示。

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 });
    });
  }

});

有没有更好的方法可以在不使用这么多条件的情况下这样做?我还想过使用丢失的不同路由器地址进行发布,但也许这太过分了?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用Mongoose的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 });
});