2017-02-24 50 views
0

我正在用貓鼬的計數查詢到MongoDB的,就像這樣:的MongoDB與貓鼬超時時,沒有記錄存在

Question.count({$and: [{"tags.text": query},{"tags.text": "Diagram"}]}).execAsync() 
     .then(respondWithResult(res)) 
     .catch(handleError(res)); 

我需要算多少記錄有「圖」標籤,另一個一個我通過參數獲得。

當結果大於0時,它可以正常工作,但如果沒有選擇記錄,它只會超時而沒有響應。我使用CLI嘗試相同的查詢和它的作品般的魅力:

> db.questions.find({$and: [{"tags.text": "Diagram"}, {"tags.text": "tag3"} ]}).count() 
0 

有什麼想法?我完全絕望。

**編輯**

我試了好東西,問題是在respondWithResult功能。

function respondWithResult(res, statusCode) { 
    statusCode = statusCode || 200; 
    return function(entity) { 
    if(entity) { 
     return res.status(statusCode).json(entity); 
    } 
    return null; 
    }; 
} 

有超時發生的地方。只有在計數的情況下,使用查找功能才能正常工作。

回答

0

當計數爲零時,您需要發送一個響應,否則響應將一直等待,直到超時發生在您的案例中。

function respondWithResult(res, statusCode) { 
    statusCode = statusCode || 200; 
    return function(entity) { 
    if(entity) { 
     return res.status(statusCode).json(entity); 
    } 
    return res.status(200).json(0); //return 0 as count 
    }; 
} 

或者乾脆:

function respondWithResult(res, statusCode) { 
     statusCode = statusCode || 200; 
     return function(entity) { 
      return res.status(statusCode).json(entity); 
     }; 
    } 
+0

很好聽,你是歡迎的。 – cubbuk