1
resposta

Duvida sobre o funcionamento do índice

Não entendi como o índice funciona?, como ele pega a localização dos registros e compara com a que foi passada no aggregate, é automático?

1 resposta

Olá Diego, tudo bem?

Estou começando na Alura e respondendo algumas dúvidas mais antigas, peço perdão pela demora!

Vamos por partes, para deixar um pouco mais claro:

  • Primeiramente criamos o nosso index
    db.alunos.createIndex({
      "localizacao": "2dsphere"
    })
    O que o mongo faz é separar uma estrutura de dados auxiliar para guardar a localização de todos usuários de nosso banco de dados, então no caso estamos dizendo que é para em nossa coleção alunos pegar o campo localização e utilizar o tipo 2dsphere

Após isso vamos para a nossa consulta:

        $geoNear: {
            "near": {
                "coordinates": [-23.5640265, -46.6527128],
                "type": "Point"
            },
            distanceField: "distancia.calculada",
            spherical: true,
        }

Então utilizamos o operador de comparação de distância ($geoNear), que nos obrigou a criar um índice com o tipo de distância geoespacial, para que ele saiba onde ele tem que fazer a busca, e após isso utilizamos o "near" que é para dizer perto de qual coordenada, pedimos para que ele armazene em um campo chamado "distancia.calculada" e que é para ele utilizar o cálculo de distância 2D (esférico).

Talvez o que ficou confuso para você, foi como ele sabia como ir no índice correto, né? A questão é que só temos um índice no formato de distância geoespacial, então automaticamente ele já foi no correto, caso tivéssemos mais de 1 teríamos que ter especificado com um atributo especial chamado key, seria algo como:

        $geoNear: {
            "near": {
                "coordinates": [-23.5640265, -46.6527128],
                "type": "Point"
            },
            key: "localizacao"
            distanceField: "distancia.calculada",
            spherical: true,
        }

Dessa forma estaríamos dizendo que de todos os nossos índices espaciais era para utilizar o "localização"

O resto o mongo faz automaticamente, ele compara a posição que passamos no $near, e vai calculando a distância com cada elemento do índice e organizando de acordo com os mais próximos :)

Abraços e Bons Estudos!