2011-03-27 10 views
2

J'utilise la recherche "near" géospatiale dans MongoDB (en utilisant le pilote C#) pour renvoyer les maisons dans les 25 miles d'un lat/long donné. Cela retourne les maisons triées par proximité au lat/long et fonctionne très bien.Interroger par près, trier, puis paginer

Cependant, je veux ajouter dans le tri (sur d'autres domaines tels que le prix de la maison) et la pagination et voici où je suis bloqué. Pour fonctionner correctement, il faudrait déterminer quelles maisons se trouvaient à moins de 25 milles du lat/long, puis trier ces résultats (disons en fonction du prix), puis prendre une «page» de 10 résultats. Ci-dessous est ce que j'ai jusqu'à présent, le problème est qu'il prend une page de résultats (basée sur le tri de proximité), puis trie cette page de 10 résultats par ce que j'ai défini dans "SetSortOrder" plutôt que de trier résultat entier près du lat/long, de sorte que chaque page de 10 résultats est triée en elle-même.

var coordinates = find.GetCoordinates(); 
var near = Query.Near("Coordinates", coordinates.Latitude, 
    coordinates.Longitude, 
    find.GetRadiansAway(), false); 
var query = Collection().Find(near); 
query.Skip = find.GetSkip(); 
query.Limit = find.GetLimit(); 
query.SetSortOrder(new string[] { "Price" }); 
var results = query.ToArray(); 

Répondre

0

Il est bon comportement, parce $near par résultat de retour par défaut trié par la distance. Et le tri effectué en interne dans $ near operator, vous ne pouvez donc pas le changer.

db.places.find ({loc: {$ près de: [50,50]}})

La requête ci-dessus trouve les plus proches points (50,50) et les renvoie trié par distance (il n'y a pas besoin pour un paramètre de tri supplémentaire)

donc, vous par exemple Price il est deuxième champ de tri que les données de tri parmi les résultats classés par la distance.

Workgraund charge le résultat entier de Query.Near et de le trier selon ce que vous voulez sur le client.