I'm developing a PHP application in which we need to retrieve results within a certain boundary, but ordered by the create date of the results, not the distance. I figured MongoDB's geoNear command would be great for this, since it takes care of calculating the distance for each result. However, I was wondering if there was a way to specify sorting by the create_date attribute, rather than distance. Ideally I would create a compound key index of coordinates and create date, and then quickly retrieve all results in a specific area ordered by create date.
Is this possible, or must I do my sorting post-query?
As i know for now you can't change default sorting, because it done internally in $near command.
Some notes from documentation:
So you should load collection ordered by distance, and than order by whatever you want on the client.
One more note: If you want sort by date within result sorted by distance you can do it as usual using
sort( { date : -1 } )
.If you're using the
$near
command then you have to first sort by distance or the concept of "near" doesn't really make any sense. On a globe everything can be "near" to a given point, it's just an issue of "how near".You have two options here:
$near
$within
commandI think what you're looking for is the
$within
commandYou can then sort these by some other key:
However, the within command may provide too many results, so you probably want to put some logic to limit the number of items returned by
$within
.Truth is, if you hit a specific limit, the value of your
$within
command generally begins to drop. Your client code may want to check if you're hitting the max results.