我基本上是在尝试创建自己的排名系统,并希望根据排名最高的用户到排名最低的用户来显示用户。例如,假设我有一个用户集合:
{_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的2,然后显示其余的ID。你知道怎么做吗?我会理想地希望这是在客户端完成,因为我只需要这是显示在客户端,而不是存储在mongo中。我会为此使用会话吗?如果是这样的话,我不太确定如何进行这样的会话。谢谢你的帮忙!
发布于 2015-11-11 10:38:10
您可以尝试使用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>https://stackoverflow.com/questions/33643022
复制相似问题