2012-06-27 115 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