Pregunta

¿Hay una forma preferida de mongo consulta con un límite y saber si habrá más resultados si la consulta para la siguiente página con salto / límite?

Lo que he estado haciendo es pedir un documento más de lo que necesito, cortándola fuera de la final, y el uso de la existencia de ese documento adicional para saber si otra consulta le dará al menos uno más resultado.

n = 10
docs = db.documents.find({'foo': 'bar'}).limit(n+1)
more = docs.count() > n
docs = docs[:n]

Siento que este es un caso de uso común (saber si debe o no mostrar un botón de "otros resultados" en un sitio web) y me siento estúpida con mi solución actual.

¿Fue útil?

Solución

tailable cursores , que le permiten volver a utilizar un cursor después todos los datos ha sido devuelto. Se vería algo como esto:

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()

Tenga en cuenta que sólo hay 10 documentos recuperados, pero el cursor pueden ser inspeccionados para determinar si hay objetos disponibles más. El único problema es que los cursores tailable sólo se pueden utilizar en colecciones tapados.

La lata anterior también se puede utilizar con un cursor regular, pero usted tendría que consulta de documentos n + 1. Esta es básicamente la misma solución que usted está usando ahora. Usted tiene que utilizar size() sin embargo, ya que lleva los modificadores de salto y limitar en cuenta.

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n

No estoy familiarizado con PyMongo, así que no sé a ciencia cierta, pero hay una posibilidad de que esta solución envía documentos completos n + 1 a su aplicación, en lugar de la n requerida, lo que resulta en gastos generales de ancho de banda menor. Si ese es el caso, es posible que desee crear una función de servidor que hace lo mismo, pero sólo devuelve un objeto que contiene documentos n en una matriz, y una bandera que indica si un documento n + 1 º es disponible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top