Since the collection I was paging had duplicate values I had to create a compound index on ProductName and id.
Create Compound Index
db.ProductGuideItem.ensureIndex({ ProductName:1, _id:1});
This solved my problem.
Reference: https://groups.google.com/d/msg/mongodb-user/3EZZIRJzW_A/oYH79npKZHkJ
Assuming you have these values:
{a:1, b:1}
{a:2, b:1}
{a:2, b:2}
{a:2, b:3}
{a:3, b:1}
So you do this for the range based pagination (page size of 2):
1st Page
find().sort({a:1, b:1}).limit(2)
{a:1, b:1}
{a:2, b:1}
2nd Page
find().min({a:2, b:1}).sort({a:1, b:1}).skip(1).limit(2)
{a:2, b:2}
{a:2, b:3}
3rd Page
find().min({a:2, b:3}).sort({a:1, b:1}).skip(1).limit(2)
{a:3, b:1}
Here are the docs for $min/max:
http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers
If you don’t have duplicate values in your collection, you don’t need to use min & max or create a compound index. You can just use $lt & $gt.