CollMod
Definição
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 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
noPadding
eusePowerOf2Sizes
MMAPv1 para o comandocollMod
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.
Opções
Opções de índice
index
A opção
index
pode alterar as seguintes propriedades de um índice existente :Propriedade do ÍndiceDescriçãoexpireAfterSeconds
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
eexpireAfterSeconds_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 propriedadeexpireAfterSeconds
existente, os erros de operação comno 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 de0
e2147483647
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
ehidden_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 camposhidden_old
ehidden_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 } } )
Validação do documento
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
econfig
.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 seerror
em documentos inválidos ou apenaswarn
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()
.
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
.
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
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()
eexplain
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} } ] } )
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.