2015-02-07 32 views
1

我有一個在貓鼬中定義的模式。當我想要檢索的所有項目我打電話限制之前的返回計數並跳過應用貓鼬

Item 
    .find() 
    .limit(limit) 
    .skip(skip) 
    .exec(function (err, Items) { 
    if(err) { return handleError(res, err); } 
    return res.json(200, Items); 
    }); 

今後我想執行一些過濾,然後計算結果的數量。如何在限制之前在響應中包含結果數量並跳過應用?

我試過包括count()後找到,但沒有運氣讓它工作。我錯過了什麼?

回答

5

我相信,這兩個查詢是必要的,可以並行執行它們:

var Promise = require('bluebird'); 
Promise.all([ 
    Item.find().limit(limit).skip(skip).exec(), 
    Item.count().exec() 
]).spread(function(items, count) { 
    res.json(200, { items: items, count: count }); 
}, function(err) { 
    handleError(res, err); 
}); 

請注意,我已經適應,以適應新的屬性包含數JSON響應格式 - 我已將數組的響應更改爲{ items: Array, count: Number }

調用.exec()不傳遞迴調返回Mongoose Promise。在上面的示例中,我使用Bluebirdnpm install bluebird)來管理異步流程,但您也可以使用您選擇的任何其他庫。