Sorting MongoDB GeoNear results by something other than distance?

前端 未结 2 1025
野的像风
野的像风 2021-01-13 17:19

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

2条回答
  •  星月不相逢
    2021-01-13 18:06

    However, I was wondering if there was a way to specify sorting by the create_date attribute, rather than distance...

    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:

    1. limit the results of $near
    2. use the $within command

    I think what you're looking for is the $within command

    center = [50, 50]
    radius = 10
    db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})
    

    You can then sort these by some other key:

    db.places.find(...).sort({created:1})
    

    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.

    db.places.find(...).limit(50).sort({created:1})
    

    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.

提交回复
热议问题