Para agentes de IA: um Ă­ndice de documentação estĂĄ disponĂ­vel em https://www.mongodb.com/pt-br/docs/llms.txt — as versĂ”es de markdown de todas as pĂĄginas estĂŁo disponĂ­veis anexando .md a qualquer caminho de URL.
Menu Docs

Evite arrays ilimitadas

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.

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.

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.

Para saber como incorporar o modelo de dados flexível em seu esquema, consulte as seguintes apresentaçÔes em MongoDB.live 2020: