Visão geral
Um ODM é semelhante ao Object Relational Mapper (ORM) usado com bancos de dados SQL tradicionais, mas projetado especificamente para o modelo de dados baseado em documentos do MongoDB.
Dica
Compatibilidade com o Mongoose
Para saber mais sobre a compatibilidade do Mongoose com diferentes versões de servidor MongoDB , consulte a página Compatibilidade do Mongoose na documentação do Mongoose.
O que é modelagem de dados de objetos?
A modelagem de dados de objetos (ODM) cria um relacionamento estruturado entre o código do aplicação e os documentos do banco de dados . Com um ODM como o Mongoose, você define esquemas no nível do aplicação que mapeiam para as collections do MongoDB e impõem estrutura nos documentos dentro dessas collections.
O MongoDB fornece um modelo de dados flexível que permite modificar o esquema do banco de dados à medida que o aplicação desenvolve. No entanto, seu caso de uso pode exigir consistência em sua estrutura de dados entre documentos em uma collection.
O Mongoose atende a essa necessidade de consistência fornecendo as seguintes funcionalidades:
Defina a estrutura e os tipos de dados dos seus documentos
Gerar modelos a partir de esquemas para interagir com coleções
Aplicar regras de validação de dados no nível do aplicação
Executar lógica personalizada antes ou depois das operações de banco de dados
Construa e execute queries de banco de dados com uma API fluente
Documentos de referência de outras collections (semelhantes às junções)
Aplicação de esquema
O Mongoose impõe esquemas no nível do aplicação . Você define um esquema que especifica a estrutura dos documentos em uma collection, incluindo nomes de campo , tipos de dados e regras de validação. O Mongoose valida os dados em relação a esse esquema antes de executar operações no banco de dados .
O esquema e as regras de validação existem apenas no código do aplicação Node.js O próprio servidor MongoDB permanece ciente dessas restrições e aceita qualquer documento BSON válido que seu aplicação envie.
Modelagem de dados
O Mongoose exige que você defina esquemas e modelos antes de interagir com suas coleções. Essa abordagem estruturada pode ser familiar para desenvolvedores com experiência em bancos de dados relacionais ou outros ORMs.
A desvantagem é a flexibilidade reduzida. Quando você precisa modificar sua estrutura de dados, você deve atualizar seus esquemas Mongoose.
Validação de esquema
O Mongoose valida os dados de duas maneiras. Primeiro, ao definir os tipos de campo em seu esquema, você especifica quais tipos de dados cada campo permite. O Mongoose rejeita operações que tentam inserir dados que não correspondem aos tipos definidos.
Em segundo lugar, você pode adicionar regras de validação específicas, como campos obrigatórios, valores mínimos ou máximos, restrições de comprimento de string ou funções de validação personalizadas.
Essas regras de validação só se aplicam quando você usa o Mongoose em seu aplicação Node.js Outros aplicativos ou ferramentas de banco de dados podem ignorar essas regras porque elas existem apenas no código do seu aplicação .
Para obter mais informações sobre a validação de dados usando o driver Node.js do MongoDB junto com a validação de esquema integrada do MongoDB, consulte o guia Validação de esquema do MongoDB no manual do servidor.
Trabalhando com várias coleções
Tanto o Mongoose quanto o driver Node.js do MongoDB oferecem suporte à combinação de documentos de várias coleções, semelhante às junções em bancos de dados relacionais.
Preencher no Mongoose
A Mongoose fornece o método populate() para fazer referência a documentos de outras collections. Você define referências em seu esquema especificando a qual coleção elas fazem referência. ObjectId é um tipo comum a ser usado para referências, mas o Mongoose também suporta o uso de outros tipos, como strings, números, UUIDs e buffers. Ao fazer query, o Mongoose pode substituir automaticamente essas referências pelos documentos reais.
O Mongoose executa operações de preenchimento executando várias queries. Esta abordagem pode ser benéfica em determinados cenários, como ao trabalhar com grandes verificações ou quando os índices estão ausentes.
$lookup no MongoDB
O MongoDB fornece o estágio de agregação $lookup para a execução de uma ação semelhante às junções externas esquerdas entre coleções no mesmo banco de dados. O driver do MongoDB Node.js fornece acesso direto a esse recurso por meio de pipelines de agregação .
O operador $lookup é executado como uma única operação de pipeline de agregação . Essa abordagem pode oferecer benefícios de desempenho em alguns casos, mas o desempenho real depende de fatores como tamanho dos dados, índices disponíveis e padrões de query.
Comece com o Mongoose
Para saber como instalar o Mongoose, conectar-se ao MongoDB e executar operações CRUD usando esquemas e modelos do Mongoose, consulte o tutorialde Introdução ao Mongoose.