Er is geen directe manier om $near
. te gebruiken of $nearSphere
en sorteer op een ander veld, omdat beide operators de resultaten al sorteren van het doen van een find()
. Wanneer u opnieuw sorteert op 'datum', sorteert u de resultaten opnieuw. Wat u echter wel kunt doen, is resultaten halen uit de $nearSphere
stapsgewijs en sorteer elke reeks resultaten. Bijvoorbeeld:
function sortByDate(a, b) { return a.date - b.date; }
// how many results to grab at a time
var itersize = 10;
// this will hold your final, two-way sorted results
var sorted_results = new Array();
for (var i=0, last=db.coll.count(); i<last-itersize; i+=itersize) {
var results = db.coll.find( {"date":{$gte:date},
// longitude, then latitude
"location":[lng, lat]} ).skip(i).limit(itersize).toArray();
// do date sorting app-side for each group of nearSphere-sorted results
sorted_results = sorted_results.concat( results.sort(sortByDate) );
}
U moet zich ook bewust zijn van de volgorde waarin u geospatiale coördinaten opgeeft in mongodb-query's. MongoDB gebruikt de geojson spec, die coördinaten doet in de volgorde X, Y, Z (d.w.z. lengtegraad, breedtegraad).