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

CollMod

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Opções
  • Controle de acesso
  • Comportamento
  • Exemplos
collMod

collMod torna possível adicionar opções a uma collection ou modificar definições de visualização.

Dica

Em mongosh, este comando também pode ser executado por meio dos métodos assistentes hideIndex() unhideIndex().

Os métodos auxiliares são práticos para os usuários mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Observação

A visualização modificada por este comando não se refere a visualizações materializadas. Para discussão sobre visualizações materializadas sob demanda, consulte $merge .

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 a todos os comandos, consulte Comandos não suportados.

  • 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 comando tem a seguinte sintaxe:

Observação

Começando no MongoDB 4.2

  • As opções noPadding e usePowerOf2Sizes MMAPv1 para o comando collMod são removidas.

  • A definição de visualização pipeline não pode incluir o estágio $out ou $merge . Se a definição de visualização incluir o pipeline aninhado (por exemplo, a definição de visualização incluir o estágio $lookup ou $facet ), essa restrição também se aplicará aos pipelines aninhados.

db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )

Para o <collection or view>, especifique o nome de uma collection ou visualização no banco de dados atual.

index

A opção index pode alterar as seguintes propriedades de um índice existente :

Propriedade do Índice
Descrição

expireAfterSeconds

O número de segundos que determina o limite de expiração de uma collection TTL.

Se for bem-sucedido, o comando retornará um documento que contém os valores antigo e novo da propriedade alterada: expireAfterSeconds_old e expireAfterSeconds_new.

Você só pode modificar um índice TTL existente; ou seja, um índice com uma propriedade expireAfterSeconds existente. Se o índice não tiver uma propriedade expireAfterSeconds existente, os erros de operação com no expireAfterSeconds field to update.

A modificação da opção de índice expireAfterSeconds redefine o $indexStats para o índice.

Se você usa índices TTL criados antes do MongoDB 5.0 ou se deseja sincronizar dados criados no MongDB 5.0 com um pré-5.0 instalação, consulte Índices configurados usando NaN para evitar problemas de configuração incorreta.

O valor expireAfterSeconds do índice TTL deve estar dentro de 0 e 2147483647 inclusive.

hidden

Um booleano que determina se o índice é oculto ou não do planejador de query.

Se o valor hidden for alterado, o comando retornará um documento contendo os valores antigo e novo da propriedade alterada: hidden_old e hidden_new.

No entanto, se o valor de hidden não tiver mudado (ou seja, ocultando um índice já oculto ou ocultando um índice já oculto), o comando emite os campos hidden_old e hidden_new da saída.

Para ocultar um índice, você deve ter featureCompatibilityVersion configurado para 4.4 ou superior.

Modificar a opção de índice hidden redefine o $indexStats do índice se o valor for alterado.

Para alterar as opções de índice, especifique o padrão de chave ou o nome do índice existente e a opção ou opções de índice que você deseja alterar:

db.runCommand( {
collMod: <collection>,
index: {
keyPattern: <index_spec> || name: <index_name>,
expireAfterSeconds: <number>, // If changing the TTL expiration threshold
hidden: <boolean> // If changing the visibility of the index from the query planner
}
} )
validator

Novo na versão 3.2.

validator permite que os usuários especifiquem expressões ou regras de validação para uma collection. Para obter mais informações, consulte Validação de esquema.

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.

Observação

  • A validação ocorre durante atualizações e inserções. Os documentos existentes não passam por verificações de validação até a modificação.

  • Você não pode especificar um validador para collections nos bancos de dados admin, local e config.

  • Você não pode especificar um validador para collections system.* .

validationLevel

Novo na versão 3.2.

O validationLevel determina quão rigorosamente o MongoDB aplica as regras de validação aos documentos existentes durante uma atualizaçã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.
validationAction

Novo na versão 3.2.

A opção validationAction determina se error em documentos inválidos ou apenas warn sobre as violações, mas permite documentos inválidos.

Importante

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

"error"
Padrão Os documentos devem passar por validação antes que a gravação ocorra. Caso contrário, a operação de gravação falhará.
"warn"
Os documentos não precisam passar pela validação. Se o documento falhar na validação, a operação de gravação registrará a falha na validação.

Para visualizar as especificações de validação de uma coleção, utilize o método db.getCollectionInfos() .

Observação

A visualização modificada por este comando não se refere a visualizações materializadas. Para discussão sobre visualizações materializadas sob demanda, consulte $merge .

viewOn

A collection de origem subjacente ou visualizar para o modo de exibição. A definição de exibição é determinada aplicando o pipeline especificado a essa fonte.

Obrigatório ao modificar uma visualização em uma MongoDB deployment que está sendo executada com controle de acesso.

pipeline

O aggregation pipeline que define a visualização.

Observação

A definição de visualização pipeline não pode incluir o estágio $out ou $merge . Se a definição de visualização incluir o pipeline aninhado (por exemplo, a definição de visualização incluir o estágio $lookup ou $facet ), essa restrição também se aplicará aos pipelines aninhados.

Obrigatório ao modificar uma visualização em uma MongoDB deployment que está sendo executada com controle de acesso.

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.

db.runCommand( {
collMod: "myView",
viewOn: "activities",
pipeline: [
{ $match: { status: "Q" } },
{ $project: { user: 1, date: 1, description: 1} } ]
} )

Para ativar a remoção automática de documentos ou alterar o valor do parâmetro expireAfterSeconds para uma coleção de séries temporais existente, emita o seguinte comando collMod :

db.runCommand({
collMod: <collection>,
expireAfterSeconds: <Number> || "off"
})

O campo expireAfterSeconds deve ser um dos seguintes:

  • Um número decimal não negativo (>=0)

  • A string "off".

Um número especifica o número de segundos após os quais os documentos expiram. A string "off" remove o parâmetro expireAfterSeconds e desabilita a remoção automática.

comment

Opcional. Você pode anexar um comentário a este comando. O comentário deve ser um campo de nível superior e pode ser qualquer tipo JSON válido. O comentário que você especifica aparece ao lado dos registros deste comando nos seguintes locais:

w

Opcional. Um documento que expressa a write concern do comando collMod.

Omitir para usar a write concern.

Se a implantação impuser autenticação/ autorização, você deverá ter o seguinte privilégio para executar o comando collMod :

Tarefa
Privilégios necessários

Modificar uma non-capped collection

collMod no banco de dados

Modificar uma visualização

collMod no banco de dados e:

  • nenhum find na visualização para modificar, ou

  • ambos find na visualização a ser modificada e find na collection/visualização de origem.

A função embutida dbAdmin fornece os privilégios exigidos.

O comando collMod obtém uma trava de coleção na coleção especificada durante a operação.

O exemplo seguinte atualiza a propriedade expireAfterSeconds de um índice TTL { lastAccess: 1 } existente em uma collection denominada user_log. A propriedade expireAfterSeconds atual do índice está definida para 1800 segundos (ou 30 minutos) e o exemplo altera o valor para 3600 segundos (ou 60 minutos).

db.runCommand({
collMod: "user_log",
index: {
keyPattern: { lastAccess: 1 },
expireAfterSeconds: 3600
}
})

Se a operação for bem-sucedida, a operação retornará um documento que inclui o valor antigo e o novo para a propriedade alterada:

{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }

Observação

Para ocultar um índice, você deve ter featureCompatibilityVersion configurado para 5.0 ou superior.

O exemplo a seguir oculta um índice existente na collection orders. Especificamente, a operação oculta o índice com a especificação { shippedDate: 1 } do planejador de query.

db.runCommand({
collMod: "orders",
index: {
keyPattern: { shippedDate: 1 },
hidden: true
}
})

Se a operação for bem-sucedida, a operação retornará um documento que inclui o valor antigo e o novo para a propriedade alterada:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Observação

Se a operação for bem-sucedida, mas o valor hidden não tiver sido alterado (ou seja, ocultando um índice já oculto ou ocultando um índice já oculto), o comando emite os campos hidden_old e hidden_new da saída.

Para ocultar um índice de texto, você deve especificar o índice por name e não por keyPattern.

O exemplo a seguir adiciona um validador a uma coleção existente chamada contacts.

Observação

O MongoDB 3.6 adiciona o operador $jsonSchema para dar suporte à validação do JSON schema.

db.runCommand( { collMod: "contacts",
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone" ],
properties: {
phone: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType : "string",
pattern : "@mongodb\.com$",
description: "must be a string and match the regular expression pattern"
},
status: {
enum: [ "Unknown", "Incomplete" ],
description: "can only be one of the enum values"
}
}
} },
validationLevel: "moderate",
validationAction: "warn"
} )

Com o moderate validationLevel, o MongoDB aplica regras de validação para inserir operações e atualizar operações em documentos existentes que já atendem aos critérios de validação. As atualizações de documentos existentes que não atendem aos critérios de validação não são verificadas quanto à validade.

Com o warn validationAction, o MongoDB registra quaisquer violações, mas permite que a inserção ou atualização continue.

Por exemplo, a seguinte operação de inserção viola a regra de validação.

db.contacts.insertOne( { name: "Amanda", status: "Updated" } )

No entanto, como o validationAction é somente warn , o MongoDB registra somente a mensagem de violação de validação e permite que a operação prossiga:

2017-12-01T12:31:23.738-05:00 W STORAGE [conn1] Document would fail validation collection: example.contacts doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }

Para obter mais informações, consulte Validação de esquema.

Voltar

cloneCollectionAsCapped