2012-06-27 117 views
2

我正在嘗試爲存儲在MongoDB中的產品文檔製作分頁機制。是什麼讓這個棘手,是每個文檔可以有多種顏色,我需要由這些文檔分頁而不是文檔本身。例如。下面的例子有兩種顏色,然後在我的分頁結果中計爲2。Paginate子文檔MongoDB

有人會這樣做,這是最簡單/最有情感的方式嗎?

在此先感謝!

{ 
     "_id": ObjectId("4fdbaf608b446b0477000142"), 
     "created_at": newDate("14-10-2011 12:02:55"), 
     "modified_at": newDate("15-6-2012 23:55:43"), 
     "sku": "A1051g", 
     "name": { 
      "en": "Earrings - Celebrity" 
     }, 
     "variants": [ 
      { 
       color: { 
        en: "Blue" 
       } 
      }, 
      { 
       color: { 
        en: "Yellow" 
       } 

      } 
     ] 
    } 
+0

你是否需要嚴格的頁面鏈接靜態鏈接分頁?或者你能否擺脫寬鬆的「顯示更多」解決方案?後者應該很容易通過迭代光標並跟蹤變量計數和光標位置(然後可以「跳過」)來完成。 –

+0

理想的情況是使用嚴格的分頁 - 但是如果它不可能的話,我們不得不使用後者。 – Kristian

+0

我認爲應該可以編寫一個map/reduce查詢來返回一個偏移量數組,但是我的頭頂我無法確切知道如何。 –

回答

1

我喜歡Sammaye的解決方案,但另一種方法可能只是拉回比您需要的更多結果。例如,如果每個頁面需要100個變體,每個產品至少有1個變體,則限制爲100的查詢會嘗試獲得100個產品,因此至少需要100個變體。

很可能,您將有超過100個變體(每個產品具有多於1個),因此當您在光標上迭代遍歷數字變體時,構建產品列表。

當您有100個變體時,請記下列表中有多少產品,您檢索的100個產品中有多少產品,並將其用作下一個查詢的跳過。

由於您必須查找跳過的文檔數量,但現在可能是一個很好的解決方案,這對於大量跳過而言最終會變得昂貴。

+0

這意味着,爲了建立一個固定的頁面URL列表(包含跳過計數),你必須迭代整個集合。 –

+0

好吧,但只是把下一個和prev如果你使用這個解決方案,或「更多」 –

+0

你的建議是一個真正的解決我的問題。但是我發現它太耗費了,真的需要確切的頁面鏈接而不是「更多」功能。這正是我最終會得到的! – Kristian