MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb, tri par geoNear et date?

Il n'y a pas de moyen direct d'utiliser $near ou $nearSphere et trier par un autre champ, car ces deux opérateurs trient déjà les résultats d'un find() . Lorsque vous triez à nouveau par "date", vous triez à nouveau les résultats. Ce que vous pouvez faire, cependant, est de récupérer les résultats de la $nearSphere progressivement et trier chaque ensemble de résultats. Par exemple :

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

Vous devez également être conscient de l'ordre dans lequel vous spécifiez les coordonnées géospatiales dans les requêtes mongodb. MongoDB utilise le geojson spec, qui effectue les coordonnées dans l'ordre X, Y, Z (c'est-à-dire la longitude, la latitude).