sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb, sortering efter geoNear och datum?

Det finns inget direkt sätt att använda $near eller $nearSphere och sortera efter ett annat fält, eftersom båda dessa operatorer redan sorterar resultaten av att göra en find() . När du sorterar igen efter "datum", sorterar du om resultaten. Vad du däremot kan göra är att hämta resultat från $nearSphere inkrementellt och sortera varje uppsättning resultat. Till exempel:

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

Du bör också vara medveten om den ordning du anger geospatiala koordinater i mongodb-frågor. MongoDB använder geojson spec, som gör koordinater i X-, Y- och Z-ordning (d.v.s. longitud, latitud).



  1. mongo db update ändrar ordningen på objektfälten

  2. Hur man säkerställer en unik e-post, användarnamn kommer in i MongoDB med Mongoose

  3. Använda jedis hur man skriver till en specifik plats/nod i redis-kluster

  4. serverinstanspoolen förstördes