Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.createCollection()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Controle de acesso
  • Comportamento
  • Exemplos
db.createCollection(name, options)

Cria uma nova coleção. Para visualizações, consulte db.createView().

Porque o MongoDB cria uma coleção implicitamente quando a coleção é referenciada primeiro em um comando, esse método é usado principalmente para criar novas coleções que usam opções específicas. Por exemplo, você usa db.createCollection() para criar um:

db.createCollection() é um wrapper em torno do comando de banco de dados create.

Você pode utilizar o db.createCollection() para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações MongoDB na nuvem

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O método db.createCollection() tem a seguinte forma de protótipo:

db.createCollection( <name>,
{
capped: <boolean>,
timeseries: { // Added in MongoDB 5.0
timeField: <string>, // required for time series collections
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3
bucketRoundingSeconds: <number> // Added in MongoDB 6.3
},
expireAfterSeconds: <number>,
clusteredIndex: <document>, // Added in MongoDB 5.3
changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0
size: <number>,
max: <number>,
storageEngine: <document>,
validator: <document>,
validationLevel: <string>,
validationAction: <string>,
indexOptionDefaults: <document>,
viewOn: <string>,
pipeline: <pipeline>,
collation: <document>,
writeConcern: <document>
}
)

O método db.createCollection() tem os seguintes parâmetros:

Parâmetro
Tipo
Descrição
name
string
O nome da collection a ser criada. Consulte Como nomear restrições.
options
documento

Opcional. Opções de configuração para criar um:

  • Capped Collection

  • Coleção clusterizada

  • Vista

O documento options contém os seguintes campos:

Campo
Tipo
Descrição
capped
booleano
Opcional. Para criar uma coleção limitada, especifique true. Se você especificar true, também deve definir um tamanho máximo no campo size.
timeseries.timeField
string
Obrigatório ao criar uma coleção de série temporal. O nome do campo que contém a data em cada documento da série temporal. Os documentos em uma coleção de série temporal devem ter uma data BSON válida como valor para o timeField.
timeseries.metaField
string

Opcional. O nome do campo que contém metadados em cada documento de série temporal. Os metadados no campo especificado devem ser dados utilizados para rotular uma série exclusiva de documentos. Os metadados devem mudar raramente ou nunca.

O nome do campo especificado não pode ser _id ou o mesmo que o timeseries.timeField. O campo pode ser de qualquer tipo, exceto array.

timeseries.granularity
string

Opcional, não use se estiver configurando bucketRoundingSeconds e bucketMaxSpanSeconds. Os valores possíveis são seconds (padrão), minutes e hours.

Defina granularity para o valor que melhor corresponde ao tempo entre os registros de data/hora de entrada consecutivos. Isso melhora o desempenho otimizando a forma interna de como o MongoDB armazena dados na coleção.

Para obter mais informações sobre granularidade e intervalos de bucket, consulte Definir granularidade para dados de séries temporais.

timeseries.bucketMaxSpanSeconds
inteiro

Opcional, usado com bucketRoundingSeconds como alternativa a granularity. Define o tempo máximo entre os registros de data/hora no mesmo bucket. Os valores possíveis são 1-31536000. Se você definir bucketMaxSpanSeconds, deverá definir bucketRoundingSeconds para o mesmo valor.

Para fazer o downgrade abaixo do MongoDB 6.3, você deve modificar a coleção para usar o valor granularity correspondente ou descartar a coleção. Para obter detalhes, consulte collMod.

timeseries.bucketRoundingSeconds
inteiro

Opcional, usado com bucketMaxSpanSeconds como alternativa a granularity. Define o número de segundos para arredondar para baixo quando o MongoDB define o timestamp mínimo para um novo bloco. Deve ser igual a bucketMaxSpanSeconds.

Por exemplo, definir ambos os parâmetros como 1800 arredonda os novos blocos para os 30 minutos mais próximos. Se um documento com um tempo de 2023-03-27T18:24:35Z não se encaixa em um bloco existente, o MongoDB cria um novo bloco com um mínimo de tempo de 2023-03-27T18:00:00Z e um tempo máximo de 2023-03-27T18:30:00Z.

expireAfterSeconds
número

Opcional. Especifica os segundos após os quais os documentos em uma coleção de séries temporais ou clustered collection expiram. O MongoDB exclui documentos expirados automaticamente.

Nas clustered collections, os documentos são excluídos automaticamente com base na chave de índice agrupada _id e os valores devem ser tipos de data. Consulte Índices TTL.

clusteredIndex
documento

A partir do MongoDB 5.3, você pode criar uma coleção com um índice agrupado. Os índices clusterizados são armazenados no mesmo arquivo WiredTiger que a collection. A collection resultante é chamada de collection clusterizada.

O campo clusteredIndex tem a seguinte sintaxe:

clusteredIndex: {
key: <object>,
unique: <boolean>,
name: <string>
}
Campo
Descrição
key
Obrigatório. O campo-chave do índice clusterizado. Deve ser definido como { _id: 1 }. O valor padrão para o campo _id é um identificador de objeto exclusivo gerado automaticamente, mas você pode definir seus próprios valores-chave de índice agrupados.
unique
Obrigatório. Deve ser true. Um índice exclusivo indica que a collection não aceitará documentos inseridos nem atualizados onde o valor da chave de índice clusterizado corresponde a um valor existente no índice.
name
Opcional. Um nome que identifica exclusivamente o índice agrupado.

Novidades na versão 5.3.

changeStreamPreAndPostImages
documento

Opcional.

A partir do MongoDB 6.0, você pode usar eventos change stream para produzir a versão de um documento antes e depois das alterações (pré e pós-imagens do documento):

  • A pré-imagem é o documento antes de ser substituído, atualizado ou excluído. Não há pré-imagem para um documento inserido.

  • A pós-imagem é o documento após ter sido inserido, substituído ou atualizado. Não há pós-imagem para um documento excluído.

  • Habilite o changeStreamPreAndPostImages para uma collection utilizando db.createCollection(), create ou collMod.

changeStreamPreAndPostImages tem a seguinte sintaxe:

changeStreamPreAndPostImages: {
enabled: <boolean>
}
enabled
Descrição
true
Permite alterar a pré e pós-imagens de fluxo de fluxo para uma coleção.
false
Desabilita a change stream pré e pós-imagens de fluxo para uma coleção.

Para obter exemplos completos com a saída do fluxo de alterações, consulte Fluxos de alterações com imagens pré e pós-documento.

Para db.createCollection() ver um exemplo nessa página, consulte Criar uma coleção com imagens prévias e posteriores do fluxo de alterações para documentos.

Novidades na versão 6.0.

size
número
Opcional. Especifique um tamanho máximo em bytes para uma coleção limitada. Uma vez que uma coleção limitada atinge seu tamanho máximo, o MongoDB remove os documentos mais antigos para abrir espaço para os novos documentos. O campo size é exigido para coleções limitadas e ignorado para outras coleções.
max
número
Opcional. O número máximo de documentos permitidos na coleção limitada. O limite size tem precedência sobre este limite. Se uma coleção limitada atingir o limite size antes de atingir o número máximo de documentos, o MongoDB removerá os documentos antigos. Se você preferir usar o limite max, certifique-se de que o limite size, que é necessário para uma coleção limitada, seja suficiente para conter o número máximo de documentos.
storageEngine
documento

Opcional. Disponível apenas para o WiredTiger Storage Engine.

Permite que os usuários especifiquem a configuração para o mecanismo de armazenamento em uma base por coleção ao criar uma coleção. O valor da opção storageEngine deve ter o seguinte formato:

{ <storage-engine-name>: <options> }

A configuração do mecanismo de armazenamento especificada ao criar coleções é validada e registrada no oplog durante a replicação para dar suporte a conjuntos de réplica com mecanismos de armazenamento diferentes.

A partir do MongoDB 7.2 (e 7.0.5), você não pode especificar as opções de criptografia do mecanismo de armazenamento wiredTiger ao criar uma coleção com db.createCollection(). Para configurar a criptografia para o mecanismo de armazenamento WiredTiger, consulte Encryption at rest.

Dica

Veja também:

validator
documento

Opcional. Permite aos usuários especificar regras ou expressões de validação para a coleção.

A opção validator requer um documento que especifica as regras ou expressões de validação. Você pode especificar as expressões usando os mesmos operadores que os operadores de consulta, com exceção de $near, $nearSphere, $text e $where.

Para saber como criar uma collection com validação de esquema, consulte Especificar Validação de Esquema JSON.

validationLevel
string

Opcional. Determina quão rigorosamente o MongoDB aplica as regras de validação aos documentos existentes durante uma atualização.

validationLevel
Descrição
"off"
Nenhuma validação para inserções ou atualizações.
"strict"
Padrão Aplique regras de validação a todas as inserções e todas as atualizações.
"moderate"
Aplique regras de validação a inserções e atualizações em documentos válidos existentes. Não aplique regras a atualizações em documentos inválidos existentes.

Para ver um exemplo que utiliza o validationLevel, consulte Especificar nível de validação para documentos existentes.

validationAction
string

Opcional. Determina se error em documentos inválidos ou apenas warn sobre as violações, mas permite que documentos inválidos sejam inseridos.

Importante

A validação de documentos só se aplica aos documentos como determinado pelo validationLevel.

Para ver um exemplo que usa validationAction, consulte Escolher como manipular documentos inválidos.

indexOptionDefaults
documento

Opcional. Permite que os usuários especifiquem uma configuração padrão para índices ao criar uma coleção.

A opção indexOptionDefaults aceita um documento storageEngine, que deve receber o seguinte formulário:

{ <storage-engine-name>: <options> }

A set do mecanismo de armazenamento especificada na criação de índices é validada e registrada no oplog durante a replicação para oferecer suporte a conjuntos de réplicas com membros que usam mecanismos de armazenamento diferentes.

viewOn
string
O nome da coleção de origem ou visualização a partir da qual criar uma visualização. Para detalhes, consulte db.createView().
pipeline
array
Uma array que consiste no(s) estágio(s) do pipeline de agregação. db.createView() cria uma visualização aplicando o pipeline especificado à coleção ou visualização viewOn. Para detalhes, consulte db.createView().
collation
documento

Especifica a coleção padrão para a coleção.

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

A opção de agrupamento tem a seguinte sintaxe:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Ao especificar agrupamento, o campo locale é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.

Se você especificar uma ordenação no nível da collection:

  • Os índices dessa coleção serão criados com esse agrupamento, a menos que a operação de criação de índice especifique explicitamente um agrupamento diferente.

  • As operações nessa coleção usam o padrão da coleção a menos que eles especifiquem explicitamente um agrupamento diferente.

    Você não pode especificar vários agrupamentos para uma operação. Por exemplo, você não pode especificar agrupamentos diferentes por campo ou, se estiver realizando uma busca com uma classificação, não poderá usar um agrupamento para a busca e outro para a classificação.

Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings.

Para uma coleção, você só pode especificar a coleção durante a criação da coleção. Depois de definir, você não poderá modificar o agrupamento da coleção.

Para ver um exemplo, consulte Especificar agrupamento.

writeConcern
documento

Opcional. Um documento que expressa a write concern para a operação. Omitir para usar a função de gravação padrão.

Quando emitido em um cluster fragmentado, o mongos converte o write concern do comando create e seu db.createCollection() auxiliar em "majority".

Se a implantação impor autenticação/autorização, db.createCollection() exigirá os seguintes privilégios:

Tarefa
Privilégios necessários
Crie uma coleção sem limite

createCollection no banco de dados, ou

insert na coleção para criar

convertToCapped para a coleção

createCollection no banco de dados

Criar uma visualização

createCollection no banco de dados.

No entanto, se o usuário tiver createCollection no banco de dados e find na visualização a ser criada, ele também deverá ter as seguintes permissões adicionais:

  • find na collection ou visualização de origem.

  • find em quaisquer outras collections ou visualizações referenciadas no pipeline, se houver.

Um usuário com o papel embutido do readWrite no banco de dados tem os privilégios exigidos para executar as operações listadas. Crie um usuário com a função necessária ou conceda a função a um usuário existente.

db.createCollection() obtém um bloqueio exclusivo na coleção ou visualização especificada durante a operação. Todas as operações subsequentes na coleção devem aguardar até que db.createCollection() libere o trava. db.createCollection() normalmente mantém essa trava por um curto período.

Criar uma visualização exige a obtenção de uma trava exclusiva adicional na collection system.views no banco de dados. Essa trava bloqueia a criação ou modificação de visualizações no banco de dados até que o comando seja concluído.

Você pode criar coleção e indexes dentro de uma transaction distribuída se a transaction não for uma transação de escrita de estilhaço cruzado.

Para usar db.createCollection() em uma transação, a transação deve usar read concern "local". Se você especificar um nível de preocupação de leitura diferente de "local", a transação falhará.

Coleções limitadas têm tamanho máximo ou contagens de documentos que as impedem de crescer além dos limites máximos. Todas as coleções limitadas devem especificar um tamanho máximo e também podem especificar uma contagem máxima de documentos. O MongoDB remove documentos mais antigos se uma coleção atingir o limite de tamanho máximo antes de ela atingir a contagem máxima de documentos. Considere o seguinte exemplo:

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

Este comando cria uma coleção chamada log com um tamanho máximo de 5 megabytes e um máximo de 5000 documentos.

Consulte Capped Collections para obter mais informações sobre coleções limitadas.

Para criar uma coleção de séries temporais que capture os dados meteorológicos das últimas 24 horas, emita este comando:

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
granularity: "hours"
},
expireAfterSeconds: 86400
}
)

Como alternativa, para criar a mesma coleção, mas limitar cada bloco a valores de carimbo de data/hora dentro da mesma hora, faça este comando:

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "data",
bucketMaxSpanSeconds: "3600",
bucketRoundingSeconds: "3600"
},
expireAfterSeconds: 86400
}
)

O exemplo a seguir db.createCollection() adiciona uma clustered collection chamada stocks:

db.createCollection(
"stocks",
{ clusteredIndex: { "key": { _id: 1 }, "unique": true, "name": "stocks clustered key" } }
)

No exemplo, clusteredIndex especifica:

  • "key": { _id: 1 }, que define a chave do índice clusterizado para o campo _id.

  • "unique": true, que indica que o valor chave do índice agrupado deve ser exclusivo.

  • "name": "stocks clustered key", que define o nome do índice clusterizado.

A partir do MongoDB 6.0, você pode usar eventos change stream para produzir a versão de um documento antes e depois das alterações (pré e pós-imagens do documento):

  • A pré-imagem é o documento antes de ser substituído, atualizado ou excluído. Não há pré-imagem para um documento inserido.

  • A pós-imagem é o documento após ter sido inserido, substituído ou atualizado. Não há pós-imagem para um documento excluído.

  • Habilite o changeStreamPreAndPostImages para uma collection utilizando db.createCollection(), create ou collMod.

O exemplo a seguir cria uma coleção que tem a opção changeStreamPreAndPostImages habilitada:

db.createCollection(
"temperatureSensor",
{ changeStreamPreAndPostImages: { enabled: true } }
);

As imagens pré e pós não estarão disponíveis para um change stream se as imagens forem:

  • Não habilitadas na coleção no momento de uma operação de atualização ou exclusão de documento.

  • Removido após o tempo de retenção pré e pós-imagem definido em expireAfterSeconds.

    • O exemplo a seguir define expireAfterSeconds para 100 segundos em um cluster inteiro:

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } }
      } )
    • O exemplo a seguir define expireAfterSeconds para 100 segundos em uma collection específica:

      use admin
      db.getSiblingDB("my_collection")
      .sensors.watch({ changeStreamOptions:
      { preAndPostImages: { expireAfterSeconds: 100 } } })
    • O exemplo a seguir retorna as configurações atuais do changeStreamOptions, incluindo expireAfterSeconds:

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • Definir expireAfterSeconds para off usa a política de retenção: pré-imagens e pós-imagens são retidas até os eventos de change streams serem removidos do oplog.

    • Se um change stream for removido do oplog, as imagens pré e pós correspondentes também serão excluídas, independentemente do tempo de retenção pré e pós-imagem expireAfterSeconds .

Considerações adicionais:

  • Habilitar pré e pós-imagens consome espaço de armazenamento e adiciona tempo de processamento. Ative as imagens anteriores e posteriores somente se precisar delas.

  • Limite o tamanho do evento de transmissão da alteração para menos de 16 megabytes. Para limitar o tamanho do evento, você pode:

    • Limite o tamanho do documento a 8 megabytes. Você pode solicitar imagens pré e pós simultaneamente na saída do change stream se outros campos de evento de change stream, como updateDescription não forem grandes.

    • Solicite apenas pós-imagens na saída de fluxo de alteração para documentos de até 16 megabytes se outros campos de evento de fluxo de alteração como updateDescription não forem grandes.

    • Solicite somente pré-imagens na saída do change stream para documentos de até 16 megabytes se:

      • as atualizações do documento afetam apenas uma pequena fração da estrutura ou conteúdo do documento, e

      • não causa um evento de alteração replace . Um evento replace sempre inclui o pós-imagem.

  • Para solicitar uma pré-imagem, defina fullDocumentBeforeChange como required ou whenAvailable em db.collection.watch(). Para solicitar uma pós-imagem, defina fullDocument usando o mesmo método.

  • As pré-imagens são escritas na coleção config.system.preimages.

    • A coleção config.system.preimages pode ficar grande. Para limitar o tamanho da coleção, você pode definir expireAfterSeconds tempo para as pré-imagens, conforme mostrado anteriormente.

    • As pré-imagens são removidas de forma assíncrona por um processo de plano de fundo.

Importante

Funcionalidade incompatível com versões anteriores

A partir do MongoDB 6.0, se você estiver usando imagens anteriores e posteriores de documentos para change streams, deverá desabilitar changeStreamPreandPostImages para cada coleção usando o collMod comando antes de poder fazer o downgrade para uma versão anterior do MongoDB.

Dica

Veja também:

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

Você pode especificar agrupamento no nível da collection ou view. Por exemplo, a operação a seguir cria uma coleção, especificando um agrupamento para a coleção (consulte Documento de Agrupamento para obter descrições dos campos de agrupamento):

db.createCollection( "myColl", { collation: { locale: "fr" } } );

Esse agrupamento será usado por índices e operações que suportam o agrupamento, a menos que especifiquem explicitamente um agrupamento diferente. Por exemplo, insira os seguintes documentos em myColl:

{ _id: 1, category: "café" }
{ _id: 2, category: "cafe" }
{ _id: 3, category: "cafE" }

A operação a seguir usa o agrupamento da coleção:

db.myColl.find().sort( { category: 1 } )

A operação retorna documentos na seguinte ordem:

{ "_id" : 2, "category" : "cafe" }
{ "_id" : 3, "category" : "cafE" }
{ "_id" : 1, "category" : "café" }

A mesma operação em uma coleção que usa agrupamento binário simples (ou seja, nenhum conjunto de coleção específico) retorna documentos na seguinte ordem:

{ "_id" : 3, "category" : "cafE" }
{ "_id" : 2, "category" : "cafe" }
{ "_id" : 1, "category" : "café" }

Você pode especificar opções de configuração do mecanismo de armazenamento específicas da coleção ao criar uma coleção com db.createCollection(). Considere a seguinte operação:

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } }
)

Esta operação cria uma nova coleção denominada users com uma string de configuração específica que o MongoDB passará para o mecanismo de armazenamento wiredTiger.

Por exemplo, para especificar o compressor zlib para blocos de arquivo na collection users , defina a opção block_compressor com o seguinte comando:

db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "block_compressor=zlib" } } }
)

A partir do MongoDB 7.2 (e 7.0.5), você não pode especificar as opções de criptografia do mecanismo de armazenamento wiredTiger ao criar uma coleção com db.createCollection(). Para configurar a criptografia para o mecanismo de armazenamento WiredTiger, consulte Encryption at rest.

← db.commandHelp()