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

mongodb, classificando por geoNear e data?


Não há uma maneira direta de usar $near ou $nearSphere e ordenar por outro campo, porque esses dois operadores já ordenam os resultados de fazer um find() . Ao classificar novamente por 'data', você está reordenando os resultados. O que você pode fazer, no entanto, é obter resultados do $nearSphere incrementalmente e classifique cada conjunto de resultados. Por exemplo:
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) );
}

Você também deve estar ciente da ordem em que especifica as coordenadas geoespaciais nas consultas do mongodb. O MongoDB usa o geojson spec, que faz as coordenadas na ordem X, Y, Z (ou seja, longitude, latitude).