Definição
collModcollModtorna 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 assistenteshideIndex()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.
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 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
Sintaxe
O comando tem a seguinte sintaxe:
Observação
Começando no MongoDB 4.2
As opções
noPaddingeusePowerOf2SizesMMAPv1 para o comandocollModsão removidas.A definição de visualização
pipelinenão pode incluir o estágio$outou$merge. Se a definição de visualização incluir o pipeline aninhado (por exemplo, a definição de visualização incluir o estágio$lookupou$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.
Opções
Opções de índice
indexA opção
indexpode alterar as seguintes propriedades de um índice existente :Propriedade do ÍndiceDescriçãoexpireAfterSecondsO 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_oldeexpireAfterSeconds_new.Você só pode modificar um índice TTL existente; ou seja, um índice com uma propriedade
expireAfterSecondsexistente. Se o índice não tiver uma propriedadeexpireAfterSecondsexistente, os erros de operação comno expireAfterSeconds field to update.A modificação da opção de índice
expireAfterSecondsredefine o$indexStatspara 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
expireAfterSecondsdo índice TTL deve estar dentro de0e2147483647inclusive.hiddenUm booleano que determina se o índice é oculto ou não do planejador de query.
Se o valor
hiddenfor alterado, o comando retornará um documento contendo os valores antigo e novo da propriedade alterada:hidden_oldehidden_new.No entanto, se o valor de
hiddennão tiver mudado (ou seja, ocultando um índice já oculto ou ocultando um índice já oculto), o comando emite os camposhidden_oldehidden_newda saída.Para ocultar um índice, você deve ter featureCompatibilityVersion configurado para
4.4ou superior.Modificar a opção de índice
hiddenredefine o$indexStatsdo í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 } } )
Validação do documento
validatorNovo na versão 3.2.
validatorpermite 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
validatorrequer 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,$texte$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,localeconfig.Você não pode especificar um validador para collections
system.*.
validationLevelNovo na versão 3.2.
O
validationLeveldetermina 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.
validationActionNovo na versão 3.2.
A opção
validationActiondetermina seerrorem documentos inválidos ou apenaswarnsobre 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() .
Visualizações
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 .
viewOnA collection de origem subjacente ou visualizar para o modo de exibição. A definição de exibição é determinada aplicando o
pipelineespecificado a essa fonte.Obrigatório ao modificar uma visualização em uma MongoDB deployment que está sendo executada com controle de acesso.
pipelineO aggregation pipeline que define a visualização.
Observação
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()eexplainna 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} } ] } )
Coleções de Time Series
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.
Anexar comentário
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:
mensagens de log do mongod, no campo
attr.command.cursor.comment.Saída do perfil do banco de dados, no campo
command.comment.Saída de
currentOp, no campocommand.comment.
Escreva preocupação
Opcional. Um documento que expressa a write concern do comando collMod.
Omitir para usar a write concern.
Controle de acesso
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 |
|
Modificar uma visualização |
A função embutida dbAdmin fornece os privilégios exigidos.
Comportamento
Bloqueio de recursos
O comando collMod obtém uma trava de coleção na coleção especificada durante a operação.
Exemplos
Alterar valor de expiração para índices
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 }
Ocultar um Índice do Planejador de Query
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.
Adicionar validação de documento a uma coleta existente
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.