2010-01-13 42 views
17

He estado usando MongoDB y RoR para almacenar datos de registro. Estoy sacando los datos y buscando los resultados de la página. ¿Alguien ha hecho paginación con MongoDB o conoce algún recurso en línea que pueda ayudarme a comenzar?Paginación con MongoDB

Saludos

Eef

Respuesta

37

paginación en MongoDB se puede lograr mediante el uso de una combinación de limit() y skip().

Por ejemplo, supongamos que tenemos una colección llamada usuarios en nuestra base de datos activa.

>> db.users.find().limit(3) 

Esto recupera una lista de los tres primeros documentos de usuario para nosotros. Tenga en cuenta, esto es esencialmente lo mismo que escribir:

>> db.users.find().skip(0).limit(3) 

para los próximos tres, podemos hacer esto:

>> db.users.find().skip(3).limit(3) 

Esto salta sobre los tres primeros registros de usuarios, y nos da las tres siguientes. Si solo hay un usuario más en su base de datos, no se preocupe; MongoDB es lo suficientemente inteligente como para devolver solo los datos que están presentes y no se bloqueará.

Esto se puede generalizar como tal, y sería más o menos equivalente a lo que haría en una aplicación web. Suponiendo que tenemos variables llamadas PAGE_SIZE que se establece en 3, y un arbitraria PAGE_NUMBER:

>> db.users.find().skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE) 

que no se puede hablar directamente como a cómo emplear este método en Ruby on Rails, pero sospecho que la biblioteca de Ruby MongoDB expone estos métodos .

+1

Gracias, parece que hace el trabajo, pero ahora Ruby se queja del parámetro omitir debe ser int, suspiro, gracias :) – RailsSon

+2

he leído NO uso 'skip()', ya que los rangos funcionan mejor para la paginación. –

+0

¿Existe una mejor alternativa para omitir() @tq? – film42