Minimongo 无法在客户端进行集合排序

Posted

技术标签:

【中文标题】Minimongo 无法在客户端进行集合排序【英文标题】:Minimongo cannot do collection sort on client side 【发布时间】:2015-05-24 21:25:38 【问题描述】:

我正在使用 Meteor 返回最接近用户地理位置的场地列表。我从服务器正确地进行了排序,但是数据在到达客户端时有点混乱。据我了解,一旦收到数据,客户端需要进行另一种处理。

我在服务器上的 publish.js 中有以下代码:

Meteor.publish('nearestVenues', function(params)
var limit = !!params ? params.limit : 50;
if (!!params && !!params.coordinates)
    return Venues.find(
         'location.coordinates': 
             $near :
         $geometry :
           type : "Point" ,
            coordinates : params.coordinates 
          ,
            $maxDistance : 6000,
            spherical: true
             
           
        , limit: limit); 
 else 
    return Venues.find(, limit: limit);

);

我的视图的模板助手中的以下内容不返回任何内容:

Template.VenueList.helpers(
venues: function()
    return Venues.find(
         'location.coordinates': 
           $near :
             $geometry :
               type : "Point" ,
                coordinates : Session.get('currentUserCoords') 
              ,
              $maxDistance : 6000,
              spherical: true
             
             
        , limit: 10)
    // return Venues.find(, limit: 5, sort: _id: -1, createdAt: -1);

编辑:从发布语句的开头删除了无关的params ? !!params : 50; 代码。

注意: 帮助器底部的注释掉的代码确实有效,所以我知道这是进行客户端排序的正确位置。那么,当信息通过 Mongo 地理空间方法排序时,如何进行客户端排序? 必须有一种方法可以将地理位置数据从离某个位置最近到最远排序——我在这里错过了什么?

【问题讨论】:

AFAIK,`minimongo 不支持服务器端支持的所有方法,只需检查 minimongo 支持的所有方法,如 $near、$geometry 和 $maxdistance 我也遇到过类似的问题,我觉得没办法。我的一个希望是有一种方法可以从查询返回实际距离并使用它。我是否正确,上面的代码没有返回距离值? 【参考方案1】:

这可能是一个红鲱鱼,但我注意到您的第一个代码 sn-p 中的第三行似乎没有做任何事情:

params ? !!params : 50;

那条线应该做什么?也许如果解决了这个问题就可以解决问题?

【讨论】:

这一行可能没用。但由于它是一个没有任何副作用的条件表达式,它不会对 AFAIK 造成伤害。 @SylvainLeroux 我同意它不会造成伤害。只是质疑它是否应该做某事而不做某事是导致问题的原因...... 是的,好眼力的家伙。这个条件是无用的,已从组合中删除。但它并没有改变任何东西。

以上是关于Minimongo 无法在客户端进行集合排序的主要内容,如果未能解决你的问题,请参考以下文章

在新数据到达 Meteor 时对其进行动画处理

流星中minimongo的原因是啥

在 MongoDB 中,如何根据对象的值对对象进行排序?

使用 C# 、 LINQ 进行排序

分页和排序问题

Meteor.call 会影响乐观 UI 吗?