Curso
Ao trabalhar com o MongoDB, especialmente como desenvolvedor que vem de um banco de dados relacional, uma das primeiras coisas que você notará é a flexibilidade do design do esquema.
As coleções no MongoDB não precisam ser criadas explicitamente com antecedência, mas há momentos em que faz sentido defini-las explicitamente e configurá-las com cuidado.
Neste artigo, veremos como e quando você pode querer criar uma coleção no MongoDB, algumas opções de configuração importantes a serem consideradas e alguns exemplos de código em JS e C# (meu favorito).
Não se preocupe, temos muita paridade de recursos entre os drivers, portanto, muito do que você vê aqui hoje será possível em <insira o idioma de sua preferência>.
Se você não tem experiência com bancos de dados NoSQL, considere começar com uma Introdução ao NoSQL.
O que é uma coleção do MongoDB?
Antes de vermos como criar coleções, vamos discutir brevemente o que é uma coleção.
Se você vem de um ambiente SQL, talvez esteja acostumado a ouvir falar de tabelas, linhas e colunas. No MongoDB, os termos são ligeiramente diferentes. Em vez de tabelas, temos coleções e, em vez de linhas, temos documentos com campos e não colunas.
Um dos superpoderes do MongoDB é seu esquema dinâmico. Isso significa que você não precisa criar uma coleção manualmente antes de usá-la. Se você inserir um documento em uma coleção que ainda não existe, o MongoDB o criará automaticamente. Por exemplo, se você executar:
db.movies.insertOne({ title: "The Matrix", year: 1999 });
Ele tentará inserir um único documento do filme "The Matrix" na coleção movies. Se ele já existir, o documento será adicionado à coleção. Caso contrário, a coleção movies será criada antes que o novo documento seja adicionado.
Você também pode adicionar vários documentos de uma vez, usando insertMany em vez de insertOne.
Quando você deve definir explicitamente as coleções do MongoDB
Embora você possa permitir que o MongoDB cuide da criação de coleções automaticamente, há bons motivos para definir as coleções com antecedência, especialmente em cenários de produção. A criação explícita de coleções dá a você a oportunidade de:
- Configure coleções com limite para registro ou armazenamento em cache.
- Configure regras de validação para impor restrições em seus esquemas.
- Aplique determinados índices padrão, como TTL (time-to-live). Esses índices em um campo de data excluirão automaticamente os documentos da sua coleção com base em um período de tempo que você especificar.
- Otimize para cargas de trabalho de gravação pesada, pré-dimensionando as coleções.
É assim que você criaria uma coleçãono MongoDB Shell:
db.createCollection("auditLogs", {
capped: true,
size: 10485760, // 10 MB
max: 1000
});
Ou com validação:
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email", "createdAt"],
properties: {
email: {
bsonType: "string",
pattern: "^.+@.+$"
},
createdAt: {
bsonType: "date"
}
}
}
}
});
Embora o MongoDB ofereça suporte a um esquema flexível, você ainda pode querer adicionar regras de validação, como campos obrigatórios, ou especificar propriedades em determinados campos, como tipos de dados ou formatação para e-mails, como visto acima. Isso ocorre se você quiser garantir que seus documentos sigam um esquema específico.
A aplicação de esquemas será familiar se você tiver experiência com SQL e, mesmo que não tenha, às vezes seus aplicativos em produção precisam ter documentos com formato previsível. Portanto, a validação é excelente para isso!
Criando coleções do MongoDB com o driver C#
Em um aplicativo C#, você também pode criar coleções explicitamente usando o driver do MongoDB. Embora não seja necessário para operações básicas, é aqui que você pode definir opções avançadas de forma programática.
var options = new CreateCollectionOptions
{
Capped = true,
MaxSize = 10485760, // 10 MB
MaxDocuments = 1000
};
await database.CreateCollectionAsync("auditLogs", options);
Para adicionar um validador:
var validator = new BsonDocument
{
{ "$jsonSchema", new BsonDocument
{
{ "bsonType", "object" },
{ "required", new BsonArray { "email", "createdAt" } },
{ "properties", new BsonDocument
{
{ "email", new BsonDocument
{
{ "bsonType", "string" },
{ "pattern", "^.+@.+$" }
}
},
{ "createdAt", new BsonDocument
{
{ "bsonType", "date" }
}
}
}
}
}
}
};
var collectionOptions = new CreateCollectionOptions<BsonDocument>
{
Validator = new BsonDocumentFilterDefinition<BsonDocument>(validator)
};
await database.CreateCollectionAsync("users", collectionOptions);
Para desenvolvedores Python, o tutorial Introduction to MongoDB and Python é um ótimo recurso.
Principais opções de configuração de coleções que você deve conhecer
Ao criar coleções explicitamente, aqui estão algumas opções que você pode querer conhecer:
cappedcria uma coleção de tamanho fixosizeTamanho máximo em bytes para uma coleção limitadamax: número máximo de documentos permitidosvalidator: Objeto JSON na sintaxe do esquema que define a validação do esquemaexpireAfterSecondsUsado com índices TTL para lidar com a exclusão automática de documentos
Você também pode aplicar índices na criação do siteme ou logo depois. O MongoDB não criará índices automaticamente, a menos que eles sejam necessários para _id.
Os índices no MongoDB permitem que você melhore o desempenho dos campos mais acessados. Eles armazenarão esses valores em cache na memória, o que significa que não haverá chamadas ao disco rígido para recuperação, o que pode economizar muito tempo e desempenho ao acessá-los regularmente.
Práticas recomendadas para definir coleções do MongoDB
Aqui estão algumas diretrizes para ajudar você a decidir quando definir coleções explicitamente:
- Criação implícita para provas rápidas de conceitos ou desenvolvimento local, ou quando o usuário final é capaz de gerar o conteúdo dinamicamente
- Criação explícita para quando você quiser aplicar validação ou configurações para indexação ou desempenho
Conclusão
O MongoDB é conhecido por seu esquema flexível, que nos dá flexibilidade na forma como estruturamos nossos dados, o que inclui a forma como criamos e gerenciamos coleções. Embora a criação implícita seja rápida e conveniente, as definições explícitas de coleções desbloqueiam recursos avançados, como validação de esquema, comportamento limitado e ajuste de desempenho.
Como sempre, o MongoDB Atlas facilita ainda mais o gerenciamento de coleções com ferramentas baseadas na interface do usuário, automação e insights de desempenho integrados. E, se você estiver trabalhando em .NET, o driver C# o ajudará com modelos de tipo forte e APIs fluentes.
Ao considerar as práticas recomendadas para a definição de coleções do MongoDB,você também pode se beneficiar da compreensão dosprincípios fundamentais de design de banco de dados.
Boa codificação! Que suas coleções sejam rápidas, válidas e bem indexadas!
Torne-se um engenheiro de dados
Perguntas frequentes
Qual é a diferença entre a criação implícita e explícita de coleções no MongoDB?
- Criação implícita: O MongoDB cria automaticamente uma coleção quando você insere um documento em uma coleção inexistente. Isso é útil para prototipagem ou desenvolvimento rápido.
- Criação explícita: Você define manualmente uma coleção antes de usá-la, geralmente para definir configurações avançadas, como regras de validação, tamanho máximo ou indexação. Isso é recomendado para ambientes de produção.
Quando devo criar explicitamente uma coleção em vez de permitir que o MongoDB a crie automaticamente?
Você deve criar explicitamente uma coleção quando: validação de esquema, coleções com limite, otimizações de desempenho e índices padrão.
Como faço para impor um esquema no MongoDB se ele não tiver esquema?
O MongoDB oferece suporte à validação do esquema JSON, que permite que você defina regras para a estrutura do documento.
O que são coleções limitadas e quando devo usá-las?
As coleções com limite são coleções de tamanho fixo que substituem automaticamente os documentos antigos quando estão cheios.
Como faço para criar uma coleção com um índice TTL (Time-To-Live)?
Os índices TTL excluem automaticamente os documentos após um tempo especificado. Primeiro, crie a coleção e, em seguida, adicione o índice.
Luce Carter é defensora sênior do desenvolvedor no MongoDB, Microsoft MVP, Contentful Dev Hero, autora de Beginning MongoDB Atlas with .NET e amante de código, luz do sol e aprendizado.




