sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo hacer la paginación usando consultas de rango en MongoDB?

Dado que la colección que estaba paginando tenía valores duplicados, tuve que crear un índice compuesto en ProductName e id.

Crear índice compuesto

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

Esto resolvió mi problema.
Referencia:https://groups.google.com/d/msg/mongodb-user/3EZZIRJzW_A/oYH79npKZHkJ

Suponiendo que tenga estos valores:

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

Así que haces esto para la paginación basada en rangos (tamaño de página de 2):

Primera página

find().sort({a:1, b:1}).limit(2)
{a:1, b:1}
{a:2, b:1}

Segunda 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}

Tercera página

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

Aquí están los documentos para $min/max:http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

Si no tiene valores duplicados en su colección, no necesita usar min y max o crear un índice compuesto. Puedes usar $lt y $gt.