Por favor,
preciso de alguma ajuda, pois estou com um problema na aula "Buscando aeroportos próximos de um ponto geográfico".
Se eu substituo a linha que recebe a "condicao"
var listaAeroportos = await conexaoAeroporto.Airports.Find(condicao).ToListAsync();
por "new BsonDocument()" funciona corretamente trazendo TODOS os aeroportos.
var listaAeroportos = await conexaoAeroporto.Airports.Find(new BsonDocument()).ToListAsync();
Mas quando eu uso o que foi colocado na aula, aparece o seguinte erro:
==========================================================
Pressione Enter
Command find failed: error processing query: ns=geo.airportsTree: GEONEAR field=loc maxdist=100000 isNearSphere=0
Falha ao encontrar o comando: erro ao processar consulta: ns=geo.airportsTree: GEONEAR field=loc maxdist=100000 isNearSphere=0
Sort: {}
Ordenar: {}
Proj: {}
Projeto: {}
planner returned error :: caused by :: unable to find index for $geoNear query.
planner retornou erro :: causado por :: não foi possível encontrar o índice para a consulta $ geoNear.
==========================================================
Mas quando eu substituo a linha:
var condicao = construtor.NearSphere(x => x.loc, localizacao, 100000);
pela linha:
BsonDocument condicao = construtor.NearSphere(x => x.loc, localizacao, 100000).ToBsonDocument();
NÃO aparece o erro, mas também NÃO recupera nenhuma informação.
Estou usando a versão 2.17.1 do MongoDB.Driver e a versão 6.0.1 do MongoDB.
Segue meu código:
static void Main(string[] args)
{
Task T = MainAsync(args);
Console.WriteLine();
Console.WriteLine("Pressione Enter");
Console.ReadLine();
}
static async Task MainAsync(string[] args)
{
try
{
// Conexão
var conexaoAeroporto = new conectandoMongoDBGeo();
// Ponto Espacial - primeiro Longitude e depois latitude... fora de padrão.
var ponto = new GeoJson2DGeographicCoordinates(-118.325258, 34.103212);
// Ponto GeoJSON definido a partir do Ponto Espacial
var localizacao = new GeoJsonPoint<GeoJson2DGeographicCoordinates>(ponto);
var construtor = Builders<Aeroporto>.Filter;
//BsonDocument condicao = construtor.NearSphere(x => x.loc, localizacao, 100000).ToBsonDocument();
var condicao = construtor.NearSphere(x => x.loc, localizacao, 100000);
//var listaAeroportos = await conexaoAeroporto.Airports.Find(new BsonDocument()).ToListAsync();
var listaAeroportos = await conexaoAeroporto.Airports.Find(condicao).ToListAsync();
foreach (var doc in listaAeroportos)
{
Console.WriteLine(doc.ToJson<Aeroporto>());
}
Console.WriteLine("Fim da lista");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Na internet o pessoal está dizendo para criar um índice ou lago assim...
... mas não entendi bem:
==========================================================
MongoDB 'unable to find index for $geoNear query'
db.bar.createIndex({point:"2dsphere"});
https://stackoverflow.com/questions/23188875/mongodb-unable-to-find-index-for-geonear-query
==========================================================
Error no geo indices for geoNear #4917
https://github.com/Automattic/mongoose/issues/4917
==========================================================
[SOLVED]-MONGODB 'UNABLE TO FIND INDEX FOR $GEONEAR QUERY'-MONGODB
https://www.appsloveworld.com/mongodb/100/2/mongodb-unable-to-find-index-for-geonear-query
==========================================================
Agradeço qualquer ajuda,
Obrigado,
Fabio I.