MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

ordem de classificação do mongodb em _id


Para expandir um pouco o que Andre disse:

Como o carimbo de data/hora ObjectID é apenas para o segundo, dois (ou mais) ObjectIDs podem ser facilmente criados com o mesmo valor para o carimbo de data/hora (os primeiros 4 bytes). Se estes foram criados na mesma máquina (machine ID - os próximos 3 bytes), pelo mesmo processo (PID - os próximos 2 bytes), então a única coisa para diferenciá-los seria o campo "inc", os últimos 3 bytes no final.

Atualização:janeiro de 2020

Esta resposta continua a ser popular, por isso vale a pena atualizar um pouco. A especificação ObjectID evoluiu desde que esta resposta foi escrita há 8 anos e os 5 bytes após o carimbo de data/hora agora são simplesmente aleatórios, o que diminuirá bastante a probabilidade de colisões. Os últimos três bytes ainda são incrementais, mas inicializados em um valor aleatório para iniciar, novamente tornando as colisões menos prováveis. O ObjectID agora contém menos contexto (você não pode dizer facilmente onde ele foi gerado e por qual processo), mas eu acho que a informação não estava sendo usada de maneira significativa e foi preterida em favor de uma melhor randomização do ID.

Finalizar atualização

Veja aqui a especificação completa:

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

Esse campo "inc" é um campo sempre incrementado (então você pode razoavelmente esperar que a classificação esteja na ordem de inserção/criação) ou um valor aleatório (provavelmente único, mas não ordenado), supondo que a especificação seja implementada corretamente, é claro . Observe que os ObjectIDs podem ser gerados pelo driver ou pelo aplicativo (ou mesmo manualmente) em vez do próprio MongoDB, portanto, a menos que você tenha controle total sobre como eles são gerados, qualquer um ou todos os itens acima podem ser aplicados.