2016-11-10 97 views
1

使用Express.js和MongoDB我想所有的老师名单时,没有与请求的URL没有查询参数,我在做类似下面的查询时,发现那么做到这一点,否则这样做,是高效就像一个条件?或任何好的建议。由于提前多种条件下GET资源的最佳做法是什么?

export const getTeachers = (req, res, next) => { 
    if(req.query.course_id) { 
     try { 
      Teacher.find({'course_ids':req.query.course_id}).exec() 
       .then((teachers) => { 
        if (!teachers) { 
         return next(errorPlaceHolder(403, false, 'no teacher found')); 
        } 
        return res.status(200).json({ 
         success: true, 
         message: 'Read course teacher', 
         teachers: teachers 
        }) 
       }) 
       .catch((error) => { 
        next(error); 
       }); 
     } catch (e) { 
      res.status(500).json({ 
       success: false, 
       message: 'Error in get Teachers', 
       error: e 
      }); 
     } 
    }else{ 
     try { 
      Teacher.find().exec() 
       .then((teachers) => { 
        if (!teachers) { 
         return next(errorPlaceHolder(403, false, 'no teacher found')); 
        } 
        return res.status(200).json({ 
         success: true, 
         message: 'Read all teacher', 
         teachers: teachers 
        }) 
       }) 
       .catch((error) => { 
        next(error); 
       }); 
     } catch (e) { 
      res.status(500).json({ 
       success: false, 
       message: 'Error in get Teachers', 
       error: e 
      }); 
     } 
    } 
} 

回答

3

您可以优化这样

var findCriteria = {} 
if(req.query.course_id) { 
    findCriteria['course_ids'] = req.query.course_id; 
} 

Teacher.find(findCriteria).exec() 
        .then((teachers) => { 

}) 
+0

感谢@azhar已经尝试过这种方式 –

0

我想你可以使用$哪里查询的代码。某些操作可能需要像

Teacher.find({$where: function() { if(req.query.course_id && req.query.course_id != this.course_id){return false};return true; }}).exec() 
        .then((teachers) => { 
} 

更多关于$where

还要注意这里不使用索引所以它的成本一点是$。

+0

欢迎您@OsmanGoniNahid。如果它解决了您的问题,请将其标记为正确。 –