MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb, Sortierung nach geoNear und Datum?

Es gibt keine direkte Möglichkeit, $near zu verwenden oder $nearSphere und nach einem anderen Feld sortieren, da diese beiden Operatoren bereits die Ergebnisse von find() sortieren . Wenn Sie erneut nach „Datum“ sortieren, sortieren Sie die Ergebnisse neu. Was Sie jedoch tun können, ist, Ergebnisse aus $nearSphere abzurufen inkrementell und sortieren Sie jeden Ergebnissatz. Zum Beispiel:

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) );
}

Sie sollten sich auch der Reihenfolge bewusst sein, in der Sie Geokoordinaten in Mongodb-Abfragen angeben. MongoDB verwendet den geojson spec, die Koordinaten in der Reihenfolge X, Y, Z (d. h. Längengrad, Breitengrad) ausgibt.