2016-11-10 96 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。如果它解決了您的問題,請將其標記爲正確。 –