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:
capped
cria uma coleção de tamanho fixosize
Tamanho 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 esquemaexpireAfterSeconds
Usado 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.