VisĂŁo geral
Um dos benefĂcios do modelo de esquema avançado do MongoDB Ă© a capacidade de armazenar arrays como valores de campo do documento. O armazenamento de arrays como valores de campo permite modelar relacionamentos um-para-muitos ou muitos-para-muitos em um Ășnico documento, em vez de entre collections separadas, como faria em um banco de dados relacional.
No entanto, vocĂȘ deve ter cuidado se estiver adicionando consistentemente elementos a arrays em seus documentos. Se vocĂȘ nĂŁo limitar o nĂșmero de elementos em uma array, seus documentos podem crescer para um tamanho imprevisĂvel. Ă medida que uma array continua a crescer, a leitura e a construção de Ăndices nessa array tĂȘm seu desempenho gradualmente reduzido. Uma array grande e crescente pode sobrecarregar os recursos do aplicativo e colocar seus documentos em risco de ultrapassar o limite co tamanho do documento BSON.
Em vez disso, considere delimitar suas arrays para melhorar o desempenho e manter seus documentos em um tamanho gerenciĂĄvel.
Exemplo
Considere o seguinte esquema para uma collection publishers:
// publishers collection { "_id": "orielly" "name": "O'Reilly Media", "founded": 1980, "location": "CA", "books": [ { "_id": 123456789, "title": "MongoDB: The Definitive Guide", "author": [ "Kristina Chodorow", "Mike Dirolf" ], "published_date": ISODate("2010-09-24"), "pages": 216, "language": "English" }, { "_id": 234567890, "title": "50 Tips and Tricks for MongoDB Developer", "author": "Kristina Chodorow", "published_date": ISODate("2011-05-06"), "pages": 68, "language": "English" } ] }
Nesse cenårio, a matriz books é ilimitada. Cada novo livro lançado por esta editora adiciona um novo subdocumento à matriz books. à medida que as editoras continuarem lançando livros, os documentos acabarão ficando muito grandes e causarão uma quantidade desproporcional de sobrecarga de memória no aplicativo.
Para evitar matrizes mutĂĄveis e ilimitadas, separe a coleção publishers em duas coleçÔes, uma para publishers e outra para books. Em vez de incorporar o documento book inteiro no documento publishers, inclua uma referĂȘncia Ă editora dentro do documento do livro:
// publishers collection { "_id": "oreilly" "name": "O'Reilly Media", "founded": 1980, "location": "CA" }
// books collection { "_id": 123456789, "title": "MongoDB: The Definitive Guide", "author": [ "Kristina Chodorow", "Mike Dirolf" ], "published_date": ISODate("2010-09-24"), "pages": 216, "language": "English", "publisher_id": "oreilly" } { "_id": 234567890, "title": "50 Tips and Tricks for MongoDB Developer", "author": "Kristina Chodorow", "published_date": ISODate("2011-05-06"), "pages": 68, "language": "English", "publisher_id": "oreilly" }
Esse esquema atualizado remove a matriz ilimitada na coleção publishers e coloca uma referĂȘncia ao editor em cada documento de livro usando o campo publisher_id . Isso garante que cada documento tenha um tamanho gerenciĂĄvel e nĂŁo haja risco de um campo de documento ficar anormalmente grande.
ReferĂȘncias de documentos podem exigir $lookups
Essa abordagem funciona especialmente bem se o aplicativo carregar as informaçÔes do livro e do editor separadamente. Se o aplicativo exigir o livro e as informaçÔes juntos, ele precisarå executar uma operação $lookup para unir os dados das coleçÔes publishers e books. As operaçÔes $lookup não são muito eficientes; mas, nesse cenårio, pode valer a pena a troca para evitar arrays ilimitadas.
Saiba mais
Para saber mais sobre modelagem de dados no MongoDB e o modelo de esquema flexĂvel, consulte Introdução Ă modelagem de dados.
Para saber como modelar relacionamentos com referĂȘncias de documentos, consulte Modelar relacionamentos de um para muitos com referĂȘncias de documentos
Para saber como executar query de um array no MongoDB, leia Fazer query de um array.
O MongoDB também oferece um curso gratuito da Universidade MongoDB sobre Modelagem de Dados: Modelagem de Dados para o MongoDB.
ApresentaçÔes do MongoDB.live 2020
Para saber como incorporar o modelo de dados flexĂvel em seu esquema, consulte as seguintes apresentaçÔes em MongoDB.live 2020:
Saiba mais sobre relacionamentos de entidade no MongoDB e exemplos de suas implementaçÔes com modelagem de dados com MongoDB.
Aprenda padrĂ”es avançados de design de modelagem de dados que vocĂȘ pode incorporar ao seu esquema com os PadrĂ”es Avançados de Design de Esquema.