Docs Menu
Docs Home
/ /

cursor.skip() (método mongosh)

cursor.skip(<offset>)

Importante

Método mongosh

Esta página documenta una mongosh Método. Esta no es la documentación de un controlador específico del lenguaje, como Node.js.

Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.

Invoque el método en un cursor para controlar dónde MongoDB empieza a devolver resultados. Este enfoque puede ser útil para implementar resultados skip() paginados.

Nota

Debes aplicar skip() al cursor antes de recuperar cualquier documento de la base de datos.

El método skip() tiene el siguiente parámetro:

Parameter
Tipo
Descripción

offset

Número

El número de documentos que se omitirán en el conjunto de resultados.

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Si usa con, asegúrese de incluir al menos un campo en su clasificación que contenga valores únicos, antes de pasar los skip() sort()resultados skip() a.

La ordenación en campos que contienen valores duplicados puede devolver un orden de clasificación inconsistente para esos campos duplicados en múltiples ejecuciones, especialmente cuando la colección está recibiendo activamente escrituras.

La forma más sencilla de garantizar la coherencia de ordenamiento es incluir el campo _id en la query de ordenación.

Consulta Ordenación coherente con el método sort() para obtener más información.

Cuando encadenas skip() y limit(), el orden de encadenamiento de los métodos no afecta los resultados. El servidor siempre aplica la operación de omitir según el orden de clasificación antes de aplicar el límite de cuántos documentos retornará.

El siguiente ejemplo de código muestra diferentes órdenes de encadenamiento para skip() y que siempre producen los mismos resultados de consulta para el mismo conjunto de limit() datos:

db.myColl.find().sort({_id: 1}).skip(3).limit(6);
db.myColl.find().sort({_id: 1}).limit(6).skip(3);

La siguiente función de JavaScript utiliza para paginar una colección por skip() su _id campo:

function printStudents(pageNumber, nPerPage) {
print( "Page: " + pageNumber );
db.students.find()
.sort( { _id: 1 } )
.skip( pageNumber > 0 ? ( ( pageNumber - 1 ) * nPerPage ) : 0 )
.limit( nPerPage )
.forEach( student => {
print( student.name );
} );
}

El método requiere que el servidor escanee desde el principio del conjunto de resultados skip() skip() de entrada antes de empezar a devolver resultados. A medida que aumenta el desplazamiento, se ralentizará.

Las consultas de rango pueden usar índices para evitar escanear documentos no deseados, lo que generalmente produce un mejor rendimiento a medida que aumenta el desplazamiento en comparación con el uso de para la skip() paginación.

Utilice este procedimiento para implementar la paginación con consultas de rango:

  • Elija un campo como _id que generalmente cambia en una dirección consistente a lo largo del tiempo y tiene un índice único para evitar valores duplicados.

  • Consulta de documentos cuyo campo sea menor que el valor inicial utilizando los operadores y,$lt sort() y

  • Almacene el último valor del campo visto para la próxima consulta.

Por ejemplo, la siguiente función utiliza el procedimiento anterior para imprimir páginas de nombres de estudiantes de una colección, ordenados aproximadamente en orden de los documentos más nuevos primero usando el _id campo (es decir, en orden descendente):

function printStudents(startValue, nPerPage) {
let endValue = null;
db.students.find( { _id: { $lt: startValue } } )
.sort( { _id: -1 } )
.limit( nPerPage )
.forEach( student => {
print( student.name );
endValue = student._id;
} );
return endValue;
}

Luego puede utilizar el siguiente código para imprimir todos los nombres de los estudiantes utilizando esta función de paginación, usando para comenzar desde la clave más grande MaxKey posible:

let currentKey = MaxKey;
while (currentKey !== null) {
currentKey = printStudents(currentKey, 10);
}

Nota

Si bien los valores de ObjectId deberían aumentar con el tiempo, no son necesariamente monótonos. Esto se debe a que:

  • Solo contienen un segundo de resolución temporal, por lo que los valores de ObjectId creados dentro del mismo segundo no tienen un orden garantizado, y

  • Son generados por los clientes, que pueden tener relojes del sistema diferentes.

La devolución de resultados paginados en orden ascendente es similar al anterior, pero utiliza $gt con un orden de clasificación ascendente:

function printStudents(startValue, nPerPage) {
let endValue = null;
db.students.find( { _id: { $gt: startValue } } )
.sort( { _id: 1 } )
.limit( nPerPage )
.forEach( student => {
print( student.name );
endValue = student._id;
} );
return endValue;
}

El uso de esta función también es similar, pero con como clave de MinKey inicio:

let currentKey = MinKey;
while (currentKey !== null) {
currentKey = printStudents(currentKey, 10);
}

Volver

cursor.size

En esta página