MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como criar índices que não diferenciam maiúsculas de minúsculas no MongoDB

Como criar um índice que não diferencia maiúsculas de minúsculas do MongoDB


Neste post, mostraremos como construir índices que não diferenciam maiúsculas de minúsculas no MongoDB usando Collations, um novo recurso lançado pelo MongoDB na versão 3.4.

O que são índices que não diferenciam maiúsculas de minúsculas?

Os índices que não diferenciam maiúsculas de minúsculas são compatíveis com consultas que realizam comparações de strings sem considerar as letras maiúsculas e, com o suporte de Collation do MongoDB 3.4, agora é possível criar isso. O agrupamento oferece a capacidade de especificar regras específicas do idioma para comparação de strings. Como as versões anteriores do MongoDB não suportavam Collation, você estava limitado a realizar uma comparação de índice com distinção entre maiúsculas e minúsculas. Nos cenários que precisavam de um comportamento que não diferencia maiúsculas de minúsculas, a única opção era converter/armazenar todas as suas strings em maiúsculas ou minúsculas e depois fazer a comparação. Como você pode imaginar, isso causa muitos problemas com consultas e operações de índice.

A propriedade Collation pode ser definida no nível da coleção ou explicitamente ao criar um índice.

  1. Defina a propriedade Collation no nível da coleção

    Se definido no nível da coleção, não precisa ser especificado com cada comando create-index ativado, pois o índice herda o Collation da coleção . A menos que especificado explicitamente durante o tempo de criação, uma coleção não tem Collation associada a ela. Você pode determinar os detalhes do Collation de sua coleção usando os comandos fornecidos abaixo:

    >db.createCollection("test")
    >db.getCollectionInfos({name: test'});
    [
    {
    "name" : "test",
    "type" : "collection",
    "options" : {
    
    },
    "info" : {
    "readOnly" : false
    },
    "idIndex" : {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "test.test"
    }
    }
    ]
    
  2. Defina a propriedade Collation ao criar um índice

    Veja como você pode especificar explicitamente um Collation ao criar uma coleção:

    >db.createCollection("test2", { collation: { locale: 'en_US', strength: 2 } } );
    
    >db.getCollectionInfos({name: 'test2'})
    [
    {
    "name" : "test2",
    "type" : "collection",
    "options" : {
    "collation" : {
    "locale" : "en_US",
    "caseLevel" : false,
    "caseFirst" : "off",
    "strength" : 2,
    "numericOrdering" : false,
    "alternate" : "non-ignorable",
    "maxVariable" : "punct",
    "normalization" : false,
    "backwards" : false,
    "version" : "57.1"
    }
    },
    "info" : {
    "readOnly" : false
    },
    "idIndex" : {
    "v" : 2,
    "key" : {
    "_id" : 1
    },
    "name" : "_id_",
    "ns" : "test.test2",
    "collation" : {
    "locale" : "en_US",
    "caseLevel" : false,
    "caseFirst" : "off",
    "strength" : 2,
    "numericOrdering" : false,
    "alternate" : "non-ignorable",
    "maxVariable" : "punct",
    "normalization" : false,
    "backwards" : false,
    "version" : "57.1"
    }
    }
    }
    ]
    
    
  3. Defina a propriedade Collation ao construir um índice

    Você também tem a opção de definir explicitamente o Collation para um índice ao construí-lo. Por exemplo, adicionando “index” na propriedade name da coleção de teste com localidade ‘en’ e força 2:

    >db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
    
  4. Como consultar usando agrupamento

    A propriedade Collation precisa ser especificada no momento da consulta para usar o índice construído com Collation:

    db.test.find({name:'blah'})
    

    Como consultar índices que não diferenciam maiúsculas de minúsculas com Collation no MongoDBClick To Tweet
  5. Especifique o agrupamento em sua consulta

    Esta consulta não usará o índice especificado acima, pois o Collation não foi especificado. Para aproveitar o Collation, precisamos especificá-lo explicitamente na consulta:

    db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
    

    Mesmo que sua coleção tenha um Collation padrão, você ainda precisa especificar o Collation na sua consulta. Caso contrário, o MongoDB não usará o índice específico:

  6. Agrupamento ao atualizar de uma versão mais antiga do MongoDB (3.2.x)

    Se você fizer upgrade de uma versão mais antiga do MongoDB (por exemplo, 3.2.x), os índices existentes não serão compatíveis com Collation. Para colocar o Collation em funcionamento, sua primeira etapa é certificar-se de que todos os novos recursos do 3.4.x estejam ativados:

    db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
    
    Atualize a versão #MongoDB para criar índices que não diferenciam maiúsculas de minúsculas usando CollationClick To Tweet

    Mais informações sobre as incompatibilidades são fornecidas nas notas de versão do MongoDB 3.x. Observe que, depois de executar essas etapas, é mais difícil fazer o downgrade para a versão 3.2. Nosso próximo passo é verificar a versão do seu índice.

    Depois de atualizar para as compatibilidades 3.4, você pode criar novos índices seguindo as etapas descritas anteriormente. Se você estiver criando um índice grande, use o trabalho de criação de índice contínuo do ScaleGrid para adicionar seus índices: