O que é um MongoDB ObjectId?

Um MongoDB ObjectId é um identificador único de 12 bytes (24 caracteres hexadecimais) usado como campo _id padrão para cada documento em uma coleção MongoDB. Sua estrutura não é aleatória — ela codifica informações significativas. Os primeiros quatro bytes armazenam um timestamp Unix representando o segundo em que o ObjectId foi criado. Os bytes restantes contêm um valor aleatório e um contador incremental para garantir unicidade mesmo quando múltiplos documentos são inseridos no mesmo segundo na mesma máquina.

Como o timestamp de criação está incorporado diretamente no identificador, você pode determinar exatamente quando um documento foi criado sem precisar armazenar um campo createdAt separado.

Como o timestamp é incorporado

Um ObjectId como 507f1f77bcf86cd799439011 é estruturado da seguinte forma:

Bytes Caracteres Hex Finalidade
1–4 507f1f77 Timestamp Unix (segundos desde a época)
5–9 bcf86cd799 Valor aleatório (único por máquina/processo)
10–12 439011 Contador incremental

Convertendo os primeiros oito caracteres hexadecimais 507f1f77 para decimal obtemos 1350844279, que corresponde a 2012-10-21T21:17:59.000Z.

Descrição da ferramenta

Esta ferramenta extrai o timestamp incorporado de qualquer MongoDB ObjectId válido e o exibe em múltiplos formatos de data. Cole um ObjectId e veja instantaneamente a data ISO 8601, a data UTC, a data local e o timestamp Unix bruto — sem necessidade de conexão com banco de dados ou código.

Exemplos

ObjectId de entrada Data extraída (UTC)
507f1f77bcf86cd799439011 2012-10-21T21:17:59.000Z
65a1fc2b0000000000000000 2024-01-13T04:44:27.000Z
000000000000000000000000 1970-01-01T00:00:00.000Z

Funcionalidades

  • Extração instantânea: Os resultados aparecem enquanto você digita — sem necessidade de cliques em botões
  • Múltiplos formatos: Exibe ISO 8601, UTC, data/hora local e timestamp Unix
  • Validação de entrada: Rejeita qualquer valor que não seja uma string hexadecimal válida de 24 caracteres
  • Sem dependências: Executa inteiramente no navegador, sem chamadas a servidores ou bibliotecas externas
  • Saída pronta para copiar: Cada campo de saída pode ser copiado individualmente

Casos de uso

  • Depuração: Verifique rapidamente quando um documento foi inserido sem consultar o banco de dados
  • Auditoria: Verifique timestamps de criação em listas de ObjectIds exportados ou arquivos de log
  • Análise forense: Determine a idade dos registros durante migração de dados ou investigação de incidentes

Como funciona

  1. A ferramenta obtém os primeiros 8 caracteres hexadecimais do ObjectId.
  2. Interpreta-os como um inteiro hexadecimal de 32 bits big-endian para obter o timestamp Unix em segundos.
  3. Multiplica por 1000 e passa o resultado para um objeto Date do JavaScript.
  4. Formata a data resultante em ISO 8601, string UTC, string com suporte a localidade e segundos brutos.

Limitações

  • Apenas o timestamp de criação é extraído. As partes aleatória e de contador do ObjectId não são decodificadas por não conterem dados relevantes para o usuário.
  • ObjectIds gerados com um timestamp personalizado ou zero retornarão uma data válida, mas potencialmente enganosa.
  • O formato de data local depende das configurações de localidade do seu navegador.

Perguntas frequentes

Posso extrair uma data de qualquer MongoDB ObjectId? Sim. Todo MongoDB ObjectId padrão — seja gerado pelo driver MongoDB, pelo Mongoose, pelo mongosh ou por ferramentas como Faker.js — contém um timestamp válido em seus primeiros quatro bytes.

Isso é o mesmo que o campo createdAt? Somente se o ObjectId foi gerado no momento da inserção (o comportamento padrão). Se um ObjectId personalizado foi fornecido manualmente, o timestamp incorporado pode diferir do tempo real de criação.

Isso funciona com ObjectIds de versões mais antigas do MongoDB? Sim. O prefixo de timestamp de 4 bytes faz parte da especificação do ObjectId desde o lançamento inicial do MongoDB. A única mudança ao longo do tempo ocorreu nos bytes intermediários (ID de máquina vs. valor aleatório), que esta ferramenta não decodifica.