按距离对mongo查询进行排序

j0e*_*j0e 4 javascript sorting mongodb meteor

鉴于以下代码:

Meteor.publish('nearestVenues', function(params){
var limit = !!params ? params.limit : 50;
params ? !!params : 50;
if (!!params && !!params.coordinates){
    return Venues.find(
        { 'location.coordinates': 
            { $near :
                { $geometry :
                  { type : "Point" ,
                    coordinates : params.coordinates 
                  },
                    $maxDistance : 6000,
                    spherical: true
                } 
            }   
        }, {limit: limit, sort: 'location.coordinates': -1 });  
} else {
    return Venues.find({}, {limit: limit});
}
});
Run Code Online (Sandbox Code Playgroud)

为什么一旦到达客户端,我就无法正确排序集合?这适用于在 sort: 'location.coordinates': -1 处过滤查询。

Bri*_*len 5

$near经营者应根据距离的结果已进行排序。只需删除排序选项,它就会为您提供所需的结果。

从 mongodb 文档:

排序操作

$near按距离对文档进行排序。如果您还为查询包含 sort(),则 sort() 会对匹配的文档重新排序,从而有效地覆盖 已经执行的排序操作$near。将 sort() 与地理空间查询一起使用时,请考虑使用 $geoWithin 运算符,它不对文档进行排序,而不是 $near。