流星排序(当前用户始终位于列表顶部)

时间:2016-10-25 07:49:42

标签: javascript mongodb sorting meteor

我想在我的应用中对用户列表(按名称)进行排序。当我与任何用户登录时,该用户将被放在列表顶部。

示例,我的数据如下:

[
    {name: "phat 1"},
    {name: "phat 3"},
    {name: "phat 2"}
]

当我使用“phat 3”登录并执行排序时,结果:

[
    {name: "phat 3"},
    {name: "phat 1"},
    {name: "phat 2"}
]

当我使用“phat 2”登录并执行排序时,结果:

[
    {name: "phat 2"},
    {name: "phat 1"},
    {name: "phat 3"}
]

这是我的代码:

// server
Meteor.publish('users', function (options: Options) {
    return Users.find({}, options);
});
// Client
const options: any = {
    sort: { 'name': 1}
};
MeteorObservable.subscribe('users', options).subscribe(() => {
    let data = Users.find({}).fetch();
});

有人帮助我, 非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以按当前记录的ID

对其进行排序
Users.find().fetch().sort(function(a, b){
    return b._id == Meteor.userId();
});

答案 1 :(得分:0)

我正在阅读这个问题"我想显示按名称排序的用户列表,但始终将当前用户置于顶部。

我确实遇到了这个问题,并以一种非常简单的方式解决了这个问题,避免了任何数组操作(我将用火焰来说明):

HTML:

<template name="userList">
{{#with currentUser}}
  {{name}}
{{/with}}
{{#each otherUsers}}
  {{name}}
{{/each}}

JS:

Template.userList.helpers({
  currentUser(){ return Meteor.user() },
  otherUsers(){
    return Meteor.users.find({ _id: { $ne: Meteor.userId() }},{ sort: { name: 1 }});
  }
});

如果每个用户的布局都很复杂,那么很容易使用嵌套模板来显示每个用户。