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.