criar
Definição
create
Cria explicitamente uma collection ou visualização.
Observação
A visualização criada por esse comando não se refere a visualizações materializadas. Para uma discussão sobre visualizações materializadas sob demanda, consulte
$merge
em vez disso.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos sem suporte.
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
Sintaxe
O comando create
tem a seguinte sintaxe:
Observação
O MongoDB 6.3 adiciona os parâmetros bucketMaxSpanSeconds
e bucketRoundingSeconds
. Para fazer o downgrade para uma versão inferior à 6.3, você deve eliminar todas as collections com esses parâmetros ou modificá-las para usar granularity
correspondente, se possível. Para saber mais, consulte collMod
.
db.runCommand( { create: <collection or view name>, capped: <true|false>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <timespan>, // Added in MongoDB 6.3 bucketRoundingSeconds: <timespan> // Added in MongoDB 6.3 }, expireAfterSeconds: <number>, clusteredIndex: <document>, // Added in MongoDB 5.3 changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0 autoIndexId: <true|false>, size: <max_size>, max: <max_documents>, storageEngine: <document>, validator: <document>, validationLevel: <string>, validationAction: <string>, indexOptionDefaults: <document>, viewOn: <source>, pipeline: <pipeline>, collation: <document>, writeConcern: <document>, encryptedFields: <document>, comment: <any> }
Campos de comando
O comando create
tem os seguintes campos:
Campo | Tipo | Descrição | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
create | string | O nome da nova collection ou visualização. Consulte Restrições de nomenclatura. Se você tentar criar uma collection ou visualização que já exista e fornecer opções idênticas para essa collection ou visualização existente, nenhuma ação será executada e o êxito será retornado. | ||||||||||||||||
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 | ||||||||||||||||
timeseries.granularity | string | Opcional, não use se estiver configurando Defina 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 Para fazer o downgrade abaixo do MongoDB 6.3, você deve modificar a coleção para usar o valor | ||||||||||||||||
timeseries.bucketRoundingSeconds | inteiro | Opcional, usado com Por exemplo, definir ambos os parâmetros como | ||||||||||||||||
expireAfterSeconds | inteiro | 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. | ||||||||||||||||
clusteredIndex | documento | A partir do MongoDB 5.3, você pode criar uma coleção com um índice clusterizado. Os índices clusterizados são armazenados no mesmo arquivo WiredTiger da coleção. A coleção resultante é chamada de coleção clusterizada. O campo
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):
Para habilitar a alteração de pré e pós-imagens de fluxo de alterações para uma coleção, defina 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 Novidades na versão 6.0. | ||||||||||||||||
size | inteiro | 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 | inteiro | 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
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 Para mais informações, consulte Especificar opções do mecanismo de armazenamento. | ||||||||||||||||
validator | documento | Opcional. Permite aos usuários especificar regras ou expressões de validação para a coleção. A opção
| ||||||||||||||||
validationLevel | string | Opcional. Determina quão rigorosamente o MongoDB aplica as regras de validação aos documentos existentes durante uma atualização.
| ||||||||||||||||
validationAction | string | Opcional. Determina se A validação de documentos só se aplica aos documentos como determinado pelo
| ||||||||||||||||
indexOptionDefaults | documento | Opcional. Permite que os usuários especifiquem uma configuração padrão para índices ao criar uma coleção. A opção
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 collection de origem ou visualização a partir da qual criar a visualização. O nome não é o namespace completo da collection ou view; ou seja, não inclui o nome do database e implica o mesmo database da view a ser criada. Você deve criar visualizações no mesmo banco de dados que a collection de origem. Consulte também | ||||||||||||||||
pipeline | array | Uma array que consiste no (s) aggregation pipeline stage(s). Uma definição de visualização A definição da visualização é pública; ou seja, as operações Consulte também | ||||||||||||||||
collation | Especifica o agrupamento padrão para a collection ou visualizaçã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:
Ao especificar agrupamento, o campo Se você especificar uma ordenação no nível da collection:
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 um modo de exibição, se nenhum agrupamento for especificado, o agrupamento padrão do modo de exibição será o agrupamento de comparação binário "simples". Para uma visualização em uma collection, a visualização não herda as configurações de agrupamento da collection. Para uma visualização em outra exibição, a visualização a ser criada deve especificar as mesmas configurações de agrupamento. Depois de criar a collection ou a visualização, você não poderá atualizar seu agrupamento padrão. Para obter um exemplo que especifica o agrupamento padrão durante a criação de uma coleção, 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, | ||||||||||||||||
encryptedFields | documento | Opcional. Um documento que configura Queryable Encryption para a coleção que está sendo criada. Para utilizar campos criptografados em uma collection, especifique uma nova opção de configuração. Você deve ter permissões para criar e modificar uma collection para criar ou editar esta configuração. A configuração inclui uma lista de campos e seus identificadores de chave correspondentes, tipos e queries suportadas.
Para mais informações, consulte Tutoriais. | ||||||||||||||||
comment | any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
O método db.createCollection()
e o método db.createView()
envolvem o comando create
.
Comportamento
Bloqueio de recursos
create
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 create
libere o bloqueio. create
normalmente mantém essa trava por um curto período de tempo.
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.
Transações
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 create
em uma transação, a transação deve usar preocupação de leitura "local"
. Se você especificar um nível de preocupação de leitura diferente de "local"
, a transação falhará.
Stable API
Alterado na versão 5.0.
Ao utilizar API estável V1, você não pode especificar os seguintes campos em um comando create
:
autoIndexId
capped
indexOptionDefaults
max
size
storageEngine
Controle de acesso
Se a implantação impuser autenticação/autorização, create
exigirá os seguintes privilégios:
Tarefa | Privilégios necessários |
---|---|
Crie uma coleção sem limite |
|
Criar uma coleção com limite |
|
Criar uma visualização |
No entanto, se o usuário tiver |
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.
Exemplos
Criar uma collection com limite
Para criar uma capped collection. limitada a 64 kilobytes, emita o comando no seguinte formulário:
db.runCommand( { create: "collection", capped: true, size: 64 * 1024 } )
Crie uma coleção de séries temporais
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 } )
Observação
Neste exemplo expireAfterSeconds
é especificado como 86400
, o que significa que os documentos expiram 86400
segundos após o valor timestamp
. Consulte Configurar Remoção Automática para Coleções de Séries Temporais (TTL).
Criar uma clustered collection
O exemplo a seguir create
adiciona uma coleção clusterizada denominada products
:
db.runCommand( { create: "products", clusteredIndex: { "key": { _id: 1 }, "unique": true, "name": "products 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": "products clustered key"
, que define o nome do índice clusterizado.
Crie uma coleção com pré e pós-imagens de fluxo de alterações para documentos
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 coleção utilizandodb.createCollection()
,create
oucollMod
.
O exemplo a seguir cria uma coleção que tem a opção changeStreamPreAndPostImages habilitada:
db.runCommand( { create: "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
para100
segundos em um cluster inteiro:use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) O exemplo a seguir retorna as configurações atuais do
changeStreamOptions
, incluindoexpireAfterSeconds
:db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) 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 eventoreplace
sempre inclui o pós-imagem.
Para solicitar uma pré-imagem, defina
fullDocumentBeforeChange
comorequired
ouwhenAvailable
emdb.collection.watch()
. Para solicitar uma pós-imagem, definafullDocument
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 definirexpireAfterSeconds
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:
Para alterar eventos de transmissão e saída, consulte Alterar eventos.
Para observar alterações em uma collection, consulte
db.collection.watch()
.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.
Criar uma Visualização
Observação
A visualização criada por esse comando não se refere a visualizações materializadas. Para discussão de visualizações materializadas on-demand, consulte $merge
em vez disso.
Uma definição de visualização pipeline
não pode incluir o estágio $out
ou $merge
. Essa restrição também se aplica a pipelines incorporados, como pipelines usados em estágios $lookup
ou $facet
.
Para criar uma visualização utilizando o comando create
, utilize a seguinte sintaxe:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )
ou se estiver especificando um agrupamento:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
Por exemplo, criar uma coleção survey
com os seguintes documentos:
db.survey.insertMany( [ { _id: 1, empNumber: "abc123", feedback: { management: 3, environment: 3 }, department: "A" }, { _id: 2, empNumber: "xyz987", feedback: { management: 2, environment: 3 }, department: "B" }, { _id: 3, empNumber: "ijk555", feedback: { management: 3, environment: 4 }, department: "A" } ] )
A seguinte operação cria uma visualização do managementRatings
com os campos _id
, feedback.management
e department
:
db.runCommand ( { create: "managementFeedback", viewOn: "survey", pipeline: [ { $project: { "management": "$feedback.management", department: 1 } } ] } )
Importante
A definição da visualização é pública; ou seja, as operações db.getCollectionInfos()
e explain
na exibição incluirão o pipeline que define a visualização. Dessa forma, evite se referir diretamente a campos e valores confidenciais nas definições de visualização.
Especifique o agrupamento
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.runCommand ( { create: "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é" }
Especifique as opções do mecanismo de armazenamento
Você pode especificar opções de configuração do mecanismo de armazenamento específicas da collection ao criar uma collection com db.createCollection()
. Considere a seguinte operação:
db.runCommand( { create: "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
. Consulte a documentação do WiredTiger sobre opções de nível de coleção para obter opções específicas a respeito do campo wiredTiger
.
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 collection com db.createCollection()
. Para configurar a criptografia para o mecanismo de armazenamento WiredTiger, consulte Encryption at Rest.