【问题标题】:Sorting mongo query by distance按距离对 mongo 查询进行排序
【发布时间】:2015-08-06 03:52:02
【问题描述】:

给定以下代码:

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 过滤查询。

【问题讨论】:

    标签: javascript mongodb sorting meteor


    【解决方案1】:

    $near 运算符应该已经按距离对结果进行了排序。只需删除排序选项,它就会为您提供所需的结果。

    来自 mongodb 文档:

    排序操作

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

    【讨论】:

    • 感谢Brian 的回复,我感觉它是自动排序的。现在,当我从服务器检索我的结果时,它几乎完全排序,但有一些似乎乱序。我问了另一位开发人员,他说这是因为从服务器返回的数据有些分散,因此可能还需要在客户端进行排序。鉴于我使用的是铁路由器,我将如何实现这种额外的排序?通过再次运行与上述相同?这会去哪里,在 Controller 中还是在 WaitOn 钩子中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多