按距离排序mongo查询

时间:2015-05-24 15:32:05

标签: javascript mongodb sorting 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});
}
});

为什么我的集合一旦到达客户端就无法正确排序?这样可以在sort:'location.coordinates'中过滤查询:-1。

1 个答案:

答案 0 :(得分:3)

$near运算符应该已经按距离对结果进行排序。只需删除排序选项,就可以获得所需的结果。

来自mongodb文档:

排序操作

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