MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como fazer paginação usando consultas de intervalo no MongoDB?


Como a coleção que eu estava paginando tinha valores duplicados tive que criar um índice composto em ProductName e id.


Criar índice composto

db.ProductGuideItem.ensureIndex({ ProductName:1, _id:1});

Isso resolveu meu problema.
Referência:https://groups.google.com/d/msg/mongodb-user/3EZZIRJzW_A/oYH79npKZHkJ

Supondo que você tenha esses valores:

{a:1, b:1}
{a:2, b:1}
{a:2, b:2}
{a:2, b:3}
{a:3, b:1}

Então você faz isso para a paginação baseada em intervalo (tamanho de página 2):


1ª página
find().sort({a:1, b:1}).limit(2)
{a:1, b:1}
{a:2, b:1}

2ª página
find().min({a:2, b:1}).sort({a:1, b:1}).skip(1).limit(2)

{a:2, b:2}
{a:2, b:3}

3ª página
find().min({a:2, b:3}).sort({a:1, b:1}).skip(1).limit(2)
{a:3, b:1}

Aqui estão os documentos para $min/max:http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

Se você não tiver valores duplicados em sua coleção, não precisará usar min &max ou criar um índice composto. Você pode simplesmente usar $lt &$gt.