sql >> Database >  >> NoSQL >> MongoDB

mongodb, sorteren op geoNear en datum?

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).



  1. JSON van EJS naar JSON-object in JS

  2. Wat doe ik verkeerd met $set en $inc in update

  3. Documenten ophalen met geneste objecten die overeenkomen met de tellingsvoorwaarde

  4. Is het ok om Mongo's Object-ID te gebruiken als unieke identificatie? Zo ja, hoe kan ik het naar een string converteren en het per string opzoeken?