Docs Menu
Docs Home
/ /
Cursors

cursor.skip()

cursor.skip(<offset>)

Importante

Método mongosh

Este es un método.mongosh Esta no es la documentación de Node.js ni de otros métodos de controlador específicos del lenguaje de programación.

En la mayoría de los casos, los métodos funcionan de la misma manera que losmongosh heredados. mongo Métodos de shell. Sin embargo, algunos métodos heredados no están disponibles mongosh en.

Para obtener la documentación del shell heredado, consulte la documentación de la versión correspondiente de MongoDB mongo Server:

Para los controladores de la API de MongoDB, consultar la documentación específica del controlador de MongoDB para cada 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