2014-04-11 49 views
2

我已經學習了只能創建用戶,管理會話和刪除用戶的應用程序。後端在Node.js中。如何將mongodb查詢拆分爲結果頁面

我有獲取一個用戶列表中查詢

var userList = function (page, callback) { 
    user.find({}, function (err, doc) { 
    if (err) { 
     callback (err); 
    } 
    callback (doc); 
    }); 
}; 

然後我有發送迴應用

var userList = function (req, res) { 
    var page = req.param.page; 
    models.account.userList(page, function (result) { 
    res.json (200, result); 
    }); 
}; 

,並在客戶端的處理程序我把結果和將它們顯示在瀏覽器的表格中。

我想要完成的是將列表分成多個頁面...可以說...每個用戶10個。因此,使用該功能用戶列表的參數頁我希望到正確的答案發送:

第1頁:結果0-9 第2頁:結果10至19 等

我可以做一個循環,提取了我但我確信從查詢中接收到的用戶重新處理它的所有列表只能提取10個用戶並不是正確的方法,但我無法弄清楚正確的方法是什麼。

我已經使用Google,但沒有找到我想要的答案。同時快速檢查MongoDB文檔。

正如你所猜測的,我是新來的。

你能幫我指導一下這個簡單任務的正確方法嗎?

非常感謝。

使用bduran代碼,我能夠做到我想要的分頁。答案後的代碼是:

var userList = function (page, itemsPerPage, callback) { 
    user 
    .find() 
    .skip((page - 1) * itemsPerPage) 
    .limit (itemsPerPage) 
    .exec (function (err, doc) { 
    if (err) { 
     //do something if err; 
    } 
    callback (doc); 
    }); 
}; 
+0

你可以看看的選項[極限](http://docs.mongodb.org/manual/reference/method/cursor.limit/)和[跳過](HTTP://docs.mongodb .org/manual/reference/method/cursor.skip /)。但是這可能不是最好的選擇,如果結果是自然順序的,你應該實際尋找一些你可以做的範圍查詢,如日期甚至是DocumentId。文件實際上也是這樣說的。但就目前來看,目前你的問題並沒有什麼合理的建議。顯示一些數據或者至少是你的分類意圖。 –

回答

1

最簡單且直接的方式來做到這一點是跳躍和查詢。您選擇例如十個元素的頁面,然後每頁跳過該數字的十倍。使用這種方法,你不必讓所有的元素,如果查詢與排序,索引是非常快:

user 
.find() 
.skip((page-1)*10) 
.limit(10) 
.exec(function(err, doc){ 
    /*Rest of the logic here*/ 
}); 

如果您需要在非自然秩序的結果(with .sort)進行排序,你會需要在數據庫中創建一個索引來加速和優化查詢。你可以這樣做。在終端把你用來做的查詢,你完成。

db.user.ensureIndex({ createdAt: -1 }) 
+0

謝謝,這正是我所尋找的。由於我處於早期階段,所以我不太在意排序,但我確信我會在不久的將來。 – Gabriel