Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro no aggregate

o query

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

db.alunos.createIndex({
    localizacao : "2dsphere"
})

não funcionou de esse erro abaixo:

assert: command failed: {
        "ok" : 0,
        "errmsg" : "geoNear command failed: { ok: 0.0, errmsg: \"more than one 2dsphere index, not sure which to run geoNear on\" }",
        "code" : 16604,
        "codeName" : "Location16604"
} : aggregate failed
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:16:14
assert.commandWorked@src/mongo/shell/assert.js:403:5
DB.prototype._runAggregate@src/mongo/shell/db.js:260:9
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1212:12
@(shell):1:1

2018-03-17T22:34:27.158-0300 E QUERY    [thread1] Error: command failed: {
        "ok" : 0,
        "errmsg" : "geoNear command failed: { ok: 0.0, errmsg: \"more than one 2dsphere index, not sure which to run geoNear on\" }",
        "code" : 16604,
        "codeName" : "Location16604"
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:16:14
assert.commandWorked@src/mongo/shell/assert.js:403:5
DB.prototype._runAggregate@src/mongo/shell/db.js:260:9
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1212:12
@(shell):1:1
>
4 respostas

Bom dia Carlos,

esse erro se deve ao fato que você já deve ter criado esse index no MongoDB, uma vez o index criado você pode realizar o aggregate direto.

Espero ter ajudado.

;)

Boa tarde Matheus!

Eu fiz assim criei o index e depois tentei fazer o aggregate e não deu certo!

não sei o que aconteceu fiz igual ao da explicação do professor!

obrigado pela ajuda Matheus valeu!

solução!

Carlos, tudo bem?

Isso aconteceu porque você criou outro índice 2dsphere com outro nome e o Mongo só aceita um.

Para resolver, faça o seguinte:

  • Liste todos os seus índices com o comando :
db.alunos.getIndexes();
  • Deixe somente o índice "localizacao", excluindo todos os demais com o comando:
db.alunos.dropIndex({   localizacao2 : "2dsphere" })

Pronto. Agora você consegue realizar a sua busca normalmente.

Obrigado pela ajuda Asser!

realmente tava com 2dsphere no bd

agora deu certo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software