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

Classificando os resultados do MongoDB GeoNear por algo diferente da distância?


Se você estiver usando o $near comando então você tem que primeiro classificar por distância ou o conceito de "próximo" não faz nenhum sentido. Em um globo tudo pode estar "próximo" de um determinado ponto, é apenas uma questão de "quão perto".

Você tem duas opções aqui:
  1. limitar os resultados de $near
  2. use o $within comando

Acho que o que você está procurando é o $within comando
center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

Você pode então classificá-los por alguma outra chave:
db.places.find(...).sort({created:1})

No entanto, o comando within pode fornecer muitos resultados, então você provavelmente deseja colocar alguma lógica para limitar o número de itens retornados por $within .
db.places.find(...).limit(50).sort({created:1})

A verdade é que, se você atingir um limite específico, o valor do seu $within comando geralmente começa a cair. Seu código de cliente pode querer verificar se você está atingindo os resultados máximos.