【问题标题】:Custom Sorting in MeteorMeteor 中的自定义排序
【发布时间】:2015-11-11 10:43:28
【问题描述】:

我基本上是在尝试创建自己的排名系统,并希望根据排名最高的用户到排名最低的用户来显示用户。例如,假设我有一个用户集合:

{_id: "CwqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "AcqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "hrqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "DsfaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "fdsqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}}

我希望能够编写一个函数并对上述用户进行排名,理想情况下通过这些用户并添加一个基于函数的排名属性(在客户端)。例如:

if(Meteor.user.profile.name == "Bob"){
  // Add 5 to the rank property
}else if(Meteor.user.profile.job == "Business Man"){
  // Add 5 more to the rank property    
}

// Now users have rank property added to them based on the function above
{_id: "CwqaMwgyRNa3G99HD",rank: 5, createdAd: Fri Oct 30, profile: {...}},
{_id: "AcqaMwgyRNa3G99HD", rank: 10, createdAd: Fri Oct 30, profile: {...}},
{_id: "hrqaMwgyRNa3G99HD", rank: 5, createdAd: Fri Oct 30, profile: {...}},
{_id: "DsfaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "fdsqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}}

最后,我想首先在客户端显示排名最高的用户。因此,理想情况下,排名为 10 的 ID 将显示排名为 5 的两个 ID,然后显示其余的 ID。知道如何做到这一点吗?理想情况下,我希望在客户端完成此操作,因为我只需要将其显示在客户端而不是存储在 mongo 中。我会为此使用会话吗?如果是这样,我不太确定如何进行这样的会话。感谢您的帮助!

【问题讨论】:

    标签: mongodb sorting session meteor ranking


    【解决方案1】:

    您可以尝试使用 collection.forEach 方法来计算排名,并使用 _.sortBy 来对结果文档进行排序。

    例如,您可以像这样定义一个模板助手:

    Template.rankings.helpers({
      user: function() { 
        var rankings = [];
        var sorted;
    
        Meteor.users.find().forEach(function(user, index) {
          var rank = 0;
          if(user.profile.name == "Bob"){
            rank = rank + 5;
          }
           if(user.profile.job == "Business Man"){
            // Add 5 more to the rank property    
            rank = rank + 5
          } 
          user.rank = rank;
          rankings.push(user); 
        }):
    
        sorted = _.sortBy(rankings, rank);
        return sorted;
    
       }
    });
    

    然后像这样遍历模板中的排序列表:

    <template name="rankings">
      {{#each user}} 
        {{rank}}, {{profile.name}}, {{profile.job}}
      {{/each}}
    </template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2011-06-06
      • 2014-06-30
      • 2010-10-27
      • 2013-04-09
      相关资源
      最近更新 更多