sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo ordena MongoDB los registros cuando no se especifica un orden de clasificación?

¿Cuál es el orden de clasificación predeterminado cuando no se especifica ninguno?

El orden de clasificación interno predeterminado (u orden natural) es un indefinido detalle de implementacion. Mantener el orden es una sobrecarga adicional para los motores de almacenamiento y la API de MongoDB no exige previsibilidad fuera de un sort() explícito o el caso especial de colecciones limitadas de tamaño fijo que tienen restricciones de uso asociadas. Para las cargas de trabajo típicas, es deseable que el motor de almacenamiento intente reutilizar el espacio preasignado disponible y tome decisiones sobre cómo almacenar datos en el disco y en la memoria de la manera más eficiente.

Sin ningún criterio de consulta, el motor de almacenamiento devolverá los resultados en orden natural (también conocido como en el orden en que se encuentran ). El orden de los resultados puede coincidir con el orden de inserción, pero este comportamiento no está garantizado y no se puede confiar en él (aparte de las colecciones limitadas).

Algunos ejemplos que pueden afectar el orden (natural) de almacenamiento:

  • WiredTiger utiliza una representación diferente de los documentos en el disco en comparación con la memoria caché en memoria, por lo que el orden natural puede cambiar en función de las estructuras de datos internas.
  • El motor de almacenamiento MMAPv1 original (eliminado en MongoDB 4.2) asigna espacio de registro para documentos según las reglas de relleno. Si un documento supera el espacio de registro actualmente asignado, la ubicación del documento (y el orden natural) se verá afectada. Los documentos nuevos también se pueden insertar en el almacenamiento marcado como disponible para su reutilización debido a documentos eliminados o movidos.
  • La replicación utiliza un formato de registro de operaciones idempotente para aplicar operaciones de escritura de forma coherente en todos los miembros del conjunto de réplicas. Cada miembro del conjunto de réplicas mantiene archivos de datos locales que pueden variar en orden natural, pero tendrán el mismo resultado de datos cuando se apliquen las actualizaciones de registro de operaciones.

¿Qué pasa si se usa un índice?

Si se utiliza un índice, los documentos se devolverán en el orden en que se encuentran (lo que necesariamente coincide con el orden de inserción o el orden de E/S). Si se usa más de un índice, el orden depende internamente de qué índice identificó primero el documento durante el proceso de eliminación de duplicados.

Si desea un orden de clasificación predecible, debe incluir un sort() explícito con su consulta y tenga valores únicos para su clave de ordenación.

¿Cómo mantienen el orden de inserción las colecciones limitadas?

La excepción de implementación señalada para el orden natural en colecciones limitadas se impone por sus restricciones de uso especiales:los documentos se almacenan en orden de inserción, pero el tamaño del documento existente no se puede aumentar y los documentos no se pueden eliminar explícitamente. Ordenar es parte del diseño de la colección limitada que asegura que los documentos más antiguos "caducarán" primero.