Dev

O que é o campo _id do MongoDB e como usar?

Pinterest LinkedIn Tumblr

MongoDB é um banco de dados que vem ganhado muita popularidade nos últimos tempos, sua capacidade de crescimento do banco de dados e modelagem amigável com objetos vem atraído cada vez mais adeptos. Afinal, o slogan do sistema é “para idéias gigantes” e por boas razões. O sistema suporta extrema escalabilidade e foi projetado para armazenar um número excepcionalmente grande de documentos.

Se você está começando ou já utiliza um banco MongoDB, já deve ter notado a existência obrigatório de um curioso campo: _id. Você sabe para que ele realmente serve e o que está escondido no meio de tantas letras e números?

Características do ObjectId

O campo _id é um dado do tipo ObjectId, e ele tem algumas funções padrões primárias:

  • _id é a chave primária de todos os elementos de uma coleção, isso permite que os registros sejam diferenciados por padrão.
  • _id é um campo indexado automaticamente. As pesquisas que especificam {_id: } referem-se ao índice _id como guia.
  • Em termos de arquitetura, por padrão, o campo _id é um ObjectID, um dos tipos BSON do MongoDB. Os usuários também podem substituir _id por algo diferente de um ObjectID, embora não seja muito recomendado.

Um dos motivos pelos quais os ObjectId são gerados da maneira mencionada acima é que ele contém um comportamento útil devido à maneira como a ordenação funciona. Como ele contém um carimbo de data/hora de 4 bytes (resolução de segundos) e um contador de incremento, além de alguns identificadores mais exclusivos, como o identificador da máquina, graças a isso podemos usar o campo _id para classificar documentos na ordem de criação, basta ordenar o campo _id. Isso pode ser útil em bases que precisam economizar o espaço, não sendo necessário um carimbo de data / hora de criação adicional.

Estruturas do ObjectId

Um ObjectId é um tipo BSON binário de 12 bytes representados em 24 caracteres hexadecimais:

{
    "_id": ObjectId("54759eb3c090d83494e2d804")
}

Esses bytes são gerados automaticamente e separados em grupos com funcionalidades específicas:

TamanhoDescrição
4 bytes4 bytes que representa os segundos desde a época do Unix
3 bytes3-byte com identificador de máquina
2 bytes2-byte com o identificador único do processo
3 bytes3-byte contador que começa com um número aleatório por coleção

Referências:
https://mongodb.github.io/node-mongodb-native/2.0/tutorials/objectid/
https://mongodb.github.io/mongo-csharp-driver/2.6/apidocs/html/T_MongoDB_Bson_ObjectId.htm
https://www.vividcortex.com/blog/what-is-mongodbs-id-field-and-how-to-use-it

Um nerd nada tradicional… Desenvolvedor web full-stack, escritor amador e inventor nas horas vagas. Apaixonado por tecnologia e entusiasmado por projetos de código aberto!