sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur gör man paginering med hjälp av intervallfrågor i MongoDB?

Eftersom samlingen jag sökte hade dubbletter av värden var jag tvungen att skapa ett sammansatt index på produktnamn och id.

Skapa sammansatt index

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

Detta löste mitt problem.
Referens:https://groups.google.com/d/msg/mongodb-user/3EZZIRJzW_A/oYH79npKZHkJ

Förutsatt att du har dessa värden:

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

Så du gör detta för intervallbaserad paginering (sidstorlek på 2):

första sidan

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

2:a sidan

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

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

tredje sidan

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

Här är dokumenten för $min/max:http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

Om du inte har dubbletter av värden i din samling behöver du inte använda min &max eller skapa ett sammansatt index. Du kan bara använda $lt &$gt.



  1. spring session redis 'Ingen böna med namnet 'springSessionRepositoryFilter' är definierad'

  2. MongoDB $runda

  3. Hur man korrekt återanvänder anslutning till Mongodb över NodeJs applikation och moduler

  4. MongoDB $rand