CollMod
Nesta página
- Definição
- Compatibilidade
- Sintaxe
- Opções
- Opções de índice
- Validação do documento
- Visualizações
- Coleções de Time Series
- Redimensionar uma capped collection
- Altere fluxos com pré e pós-imagens de documentos
- Anexar comentário
- Escreva preocupação
- Controle de acesso
- Comportamento
- Bloqueio de recursos
- Exemplos
- Alterar valor de expiração para índices
- Ocultar um Índice do Planejador de Query
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
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
Para alterar as opções de índice, especifique o padrão de chave ou o nome das opções de índice existentes que você deseja alterar:
db.runCommand( { collMod: <collection>, index: { keyPattern: <index_spec> | name: <index_name>, expireAfterSeconds: <number>, // Set the TTL expiration threshold hidden: <boolean>, // Change index visibility in the query planner prepareUnique: <boolean>, // Reject new duplicate index entries unique: <boolean> // Convert an index to a unique index }, dryRun: <boolean> } )
Se o índice não existir, os erros de comando com a mensagem "cannot find index <name|keyPattern> for ns <db.collection>"
.
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 o comando for bem-sucedido, o comando retornará um documento que contém:
expireAfterSeconds_new
, o novo valor paraexpireAfterSeconds
expireAfterSeconds_old
, o valor antigo deexpireAfterSeconds
, se o índice tivesse um valor paraexpireAfterSeconds
antes.
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.prepareUnique
Um booleano que determina se o índice aceitará novas entradas duplicadas.
Novas entradas duplicadas falham com erros de DuplicateKey quando
prepareUnique
étrue
. O índice resultante pode ser convertido em um índice único. Para converter o índice, utilizecollMod
com a opçãounique
.Se um índice existente for atualizado para que
prepareUnique
sejatrue
, o índice não será verificado quanto a entradas de índice duplicadas pré-existentes.Novidades na versão 6.0.
unique
Um booleano que determina se o índice é ou não único.
Um valor de
false
não é compatível.Quando
unique
étrue
,collMod
verifica o índicekeyPattern
em busca de duplicatas e o converte em um índice único se não houver entradas de índice duplicadas.Se forem detectadas duplicatas durante a verificação inicial,
collMod
retornaráCannotConvertIndexToUnique
e uma lista de documentos conflitantes. Para converter um índice com entradas duplicadas em um índice único, corrija quaisquer conflitos relatados e execute novamentecollMod
.Para encerrar uma conversão, defina
prepareUnique
comofalse
.Para ver um exemplo de como converter um índice não único em um índice único, consulte Converter um índice existente em um índice único.
Novidades na versão 6.0.
dryRun
Valor padrão:
false
Usado apenas quando
index.unique
étrue
.Antes de converter um índice não único em um índice único, você pode executar o comando
collMod
comdryRun: true
. Se você fizer isso, o MongoDB verificará a coleção em busca de chaves duplicadas e retornará quaisquer violações.Usar
dryRun: true
para confirmar que você pode converter um índice em exclusivo sem erros.
Validação do documento
validator
validator
permite aos usuários especificar regras ou expressões 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
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.
Para ver um exemplo que utiliza o
validationLevel
, consulte Especificar nível de validação para documentos existentes.
validationAction
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
.Para ver um exemplo que usa
validationAction
, consulte Escolher como manipular documentos inválidos.
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.
Redimensionar uma capped collection
Novidades na versão 6.0.
A partir do MongoDB 6.0, você pode redimensionar uma capped collection. Para alterar o tamanho máximo de uma capped collection em bytes, use a opção cappedSize
. Para alterar o número máximo de documentos em uma capped collection existente, use a opção cappedMax
.
Observação
Você não pode usar esses comandos para redimensionar o oplog. Use replSetResizeOplog
em vez disso.
cappedSize
Especifique um novo tamanho máximo, em bytes, para uma capped collection.
cappedSize
deve ser maior que0
e menor que1e+15
(1 PB).
cappedMax
Especifica um novo número máximo de documentos em uma capped collection. Definir
cappedMax
menor ou igual a0
não implica nenhum limite.
Por exemplo, o comando a seguir define o tamanho máximo de uma capped collection para 100000 bytes e define o número máximo de documentos na collection para 500:
db.runCommand( { collMod: <collection>, cappedSize: 100000, cappedMax: 500 } )
Altere fluxos com pré e pós-imagens de 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
changeStreamPreAndPostImages
para uma coleção utilizandodb.createCollection()
,create
oucollMod
.
Para usar collMod
para habilitar a alteração de pré e pós-imagens de fluxo para uma collection, use o campo changeStreamPreAndPostImages
:
db.runCommand( { collMod: <collection>, changeStreamPreAndPostImages: { enabled: <boolean> } } )
Para habilitar a alteração de pré e pós-imagens de fluxo para uma collection, defina changeStreamPreAndPostImages
como true
. Por exemplo:
db.runCommand( { collMod: "orders", changeStreamPreAndPostImages: { enabled: true } } )
Para desativar a alteração do change stream de uma collection, defina changeStreamPreAndPostImages
como false
. Por exemplo:
db.runCommand( { collMod: "orders", changeStreamPreAndPostImages: { enabled: false } } )
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 pré e pós-documento para change streams, deverá desabilitar changeStreamPreAndPostImages para cada collMod
usando o 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.
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
.