2013-03-30 78 views
3

我正在一個節點項目上應用網格的過濾器和分頁。貓鼬跳過,限制和計數

我需要找到的項目,從查詢中找到的總計和Mongodb集合中的總項目。

我的查詢是像(CoffeeScript的):

projects.find(query).limit(10).skip(skip).select(q).exec (err, items) -> 
     projects.count().exec (err, count) -> 
     itemsTotals = count 
     itemsFound = items.length 

但如果我的查詢返回的結果比「限價」變大,然後找到的項目的數量限制所以和我添加第三個查詢或我直接使用聚合框架。

我真的需要兩個查詢(projects.find和projects.count)嗎?

使用單個貓鼬查詢(可能會限制查詢中直接返回的結果),可以獲得兩個值(集合的總數和總數)?

回答

1

你不行。您需要使用limit和count()來執行find(),但考慮到您正在複製查詢數量,因此您正在放慢系統速度。而不是執行一個count(),你可以將內存中的總長度存儲到內存中,並在執行insert()時自動遞增它。當服務器啓動時執行count()來初始化變量。

2

我還沒有找到更好的答案,但我發現這個選項值得一提。顯而易見的缺點是數據庫正在返回更大的數據集。

projects.find(query).select(q).exec (err, items) -> 
    itemsTotals = items.length 
    items = items.slice(skip, 10 + skip) 
    itemsFound = items.length 

我發現這個here