Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Dados de modelo para controle de versão de esquema

Nesta página

  • Visão geral
  • Padrão de versionamento de esquema
  • Exemplo
  • Casos de uso

Os esquemas de banco de dados ocasionalmente precisam ser atualizados. Por exemplo, um esquema projetado para manter as informações de contato do usuário pode precisar ser atualizado para incluir novos métodos de comunicação à medida que se tornam populares, como Twitter ou Skype.

Você pode usar o modelo de esquema flexível do MongoDB, que suporta documentos com formatos diferentes na mesma coleção, para atualizar gradualmente o esquema da sua coleção. À medida que você atualiza seu modelo de esquema, o padrão de controle de versão do esquema permite que você acompanhe essas atualizações com números de versão. O código do seu aplicativo pode usar números de versão para identificar e lidar com documentos com formatos diferentes sem tempo de inatividade.

Para implementar o padrão de Versão de Esquema, adicione um campo schema_version (ou de forma semelhante) ao seu esquema da primeira vez que você modificar seu esquema. Os documentos que usam o novo esquema devem ter schema_version ou 2 para indicar que estão de acordo com a segunda iteração de seu esquema. Se você atualizar seu esquema novamente, incremente o schema_version.

O código do aplicativo pode usar a schema_versionde um documento ou a falta dela para manipular documentos condicionalmente. Use o esquema mais recente para armazenar novas informações no banco de dados.

O exemplo a seguir repete o esquema para documentos na coleção users.

Na primeira iteração deste esquema, um registro inclui campos galactic_id, name e phone:

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}

Na próxima iteração, o esquema é atualizado para incluir mais informações em uma forma diferente:

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}

Adicionar um schema_version significa que um aplicativo pode identificar documentos moldados para o novo esquema e tratá-los adequadamente. O aplicativo ainda poderá lidar com documentos antigos se schema_version não existir no documento.

Por exemplo, considere uma aplicação que encontre o(s) número(s) de telefone de um utilizador até galactic_id. Após receber um galactic_id, o aplicativo precisa fazer query do banco de dados:

db.users.find( { galactic_id: 123 } );

Depois que o documento é retornado do banco de dados, o aplicativo verifica se o documento tem um campo schema_version.

  • Se não tiver um campo schema_version, o aplicativo passará o documento retornado para uma função dedicada que renderiza o campo phone a partir do esquema original.

  • Se tiver um campo schema_version, o aplicativo verificará a versão do esquema. Neste exemplo, o schema_version é 2 e o aplicativo passa o documento retornado para uma função dedicada que renderiza os novos campos contact_method.work e contact_method.home.

Usando o campo schema_version , o código do aplicativo pode oferecer suporte a qualquer número de iterações de esquema na mesma coleção adicionando funções de manipulador dedicadas ao código.

O padrão de versão do esquema é ideal para qualquer um ou uma combinação dos seguintes casos:

  • O tempo de inatividade do aplicativo não é uma opção

  • A atualização de documentos pode levar horas, dias ou semanas para ser concluída

  • Atualizar documentos para a nova versão do esquema não é um requisito

O padrão de Controle de Versão de Esquema ajuda você a decidir melhor quando e como as migrações de dados ocorrerão em relação aos bancos de dados tabulares tradicionais.

← Dados de modelo compatíveis com pesquisa de palavras-chave