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

orden de clasificación mongodb en _id

Para ampliar un poco lo que dijo Andre:

Dado que la marca de tiempo de ObjectID es solo para el segundo, se podrían crear fácilmente dos (o más) ObjectID con el mismo valor para la marca de tiempo (los primeros 4 bytes). Si estos fueron creados en la misma máquina (ID de máquina - los siguientes 3 bytes), por el mismo proceso (PID - los siguientes 2 bytes), entonces lo único que los diferenciaría sería el campo "inc", los últimos 3 bytes al final.

Actualización:enero de 2020

Esta respuesta sigue siendo popular, por lo que vale la pena actualizarla un poco. La especificación de ObjectID ha evolucionado desde que se escribió esta respuesta hace 8 años y los 5 bytes después de la marca de tiempo ahora son simplemente aleatorios, lo que disminuirá en gran medida la probabilidad de colisiones. Los últimos tres bytes siguen siendo incrementales, pero se inicializaron en un valor aleatorio para comenzar, lo que nuevamente hace que las colisiones sean menos probables. El ObjectID ahora contiene menos contexto (no se puede saber fácilmente dónde se generó y por qué proceso), pero supongo que la información no se usó de manera significativa y se ha obsoleto a favor de una mejor aleatorización de la identificación.

Finalizar actualización

Vea aquí la especificación completa:

https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification

Ese campo "inc" es un campo que se incrementa constantemente (entonces puede esperar razonablemente que la ordenación esté en el orden de inserción/creación) o un valor aleatorio (entonces probablemente único, pero no ordenado), suponiendo que la especificación se implemente correctamente, por supuesto . Tenga en cuenta que los ObjectID pueden ser generados por el controlador o la aplicación (o, de hecho, manualmente) en lugar de por MongoDB en sí mismo, por lo que, a menos que tenga control total sobre cómo se generan, entonces cualquiera o todos los anteriores pueden aplicarse.