6
respostas

Parece que o geoNear não funciona.

Quando eu tento rodar o comando, exatamente este que está na Ajuda

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

Gera este erro:

assert: command failed: {
    "ok" : 0,
    "errmsg" : "geoNear command failed: { waitedMS: 0, ok: 0.0, errmsg: \"can't find ns\" }",
    "code" : 16604
} : aggregate failed
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:13:14
assert.commandWorked@src/mongo/shell/assert.js:287:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1312:5
@(shell):1:1

2016-10-08T00:12:46.167-0300 E QUERY    [thread1] Error: command failed: {
    "ok" : 0,
    "errmsg" : "geoNear command failed: { waitedMS: 0, ok: 0.0, errmsg: \"can't find ns\" }",
    "code" : 16604
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:13:14
assert.commandWorked@src/mongo/shell/assert.js:287:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1312:5
@(shell):1:1

Não sei se estou deixando passar algo, ou falta instalar alguma dependência no meu MongoDB. (Tive que dar apt-get para o mongoimport funcionar antes.)

6 respostas

Lol! Encontrei o erro. A coleção está declarada no singular "aluno".

Mas mesmo arrumando isso, nao me retorna nada! (Pelo menos não retorna mais erro.)

Fala aí Odilon, blz?

Como estão cadastrados as coordenadas dos seus alunos?

Odilon, é o seguinte: o arquivo que "enxerga" a localização detecta acentos e é case-sensitive também. Eu passei pelo mesmo problema com o arquivo json que baixei do curso. Faz o seguinte. Abre o seu mongo de novo. Lista seus indexes com o comando.

db.nomedobanco.getIndexes()

pega o nome exato do index que você quer excluir. vai no mongo e coloca

db.nomedobanco.dropIndex{nomedoindex: "2dspherical"}

Com isso você deleta o banco que você não quer

Pra funcionar o arquivo do curso no mongo, é importante que você use a chave "localizacao", sem acentos. Aí faz o seguinte

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

Agora, faz o teste de novo por que ele vai funcionar com toda certeza

Verifica se o index foi criado corretamente.

Tb estava com problemas ao usar esta funcionalidade. Retornava sempre o seguinte erro com o $geoNear:

"errmsg" : "geoNear command failed: { ok: 0.0, errmsg: \"The featureCompatibilityVersion must be 3.4 to use collation. See http://dochub.mongodb.org/core/3.4-feature-compatibility.\", code: 72,
codeName: \"InvalidOptions\" }",

Fiz uma busca por ele no google e encontrei o seguinte comando para executar, que resolveu o meu problema:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

Tudo funcionando agora!

POST REMOVIDO

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