从Meteor Presence获取特定用户数据

时间:2013-05-15 13:39:38

标签: mongodb meteor handlebars.js meteorite

使用Meteor Presence,我可以返回在线用户的userId。我想看看如何取回用户对象。

Meteor.publish('userPresence', function() {
  return Meteor.presences.find({}, {fields: {state: true, userId: true}});
});

正如你所看到我发布该集合并订阅它:

Meteor.subscribe('userPresence');

我有一个视图,其中包含每个块以获取所有在线用户:

<template name="presenceList">
   <h1>{{onlineCount}}</h1>
   {{#each onlineUsers}}
      {{> presenceSingle}}
   {{/each}}
</template>

此外,这是包含帮助程序的文件:

Template.presenceList.helpers({
    onlineUsers: function() {
    return Meteor.presences.find();
   },
   onlineCount: function() {
    return Meteor.presences.find().count();
   }
});

我最大的困难是在单个用户模板中返回用户名。

任何帮助都会很棒,谢谢。

2 个答案:

答案 0 :(得分:1)

添加下划线包

mrt add underscore

然后您可以将您的onlineUsers更新为

onlineUsers: function() {
  var users = _.map(Meteor.presences.find().fetch(), function(user) { 
    return Meteor.users.findOne({_id :user.userId})
  });
  return users;
}

我上面所做的就是使用下划线的_.map创建一个包含来自Meteor.users.findOne({_ id:user.userId})的返回对象的新数组,请参阅link

最后,您的在场单个模板

<template name="presenceSingle">
  <p>{{_id}}</p>
  <p>{{createdOn}}</p>
  <p>{{emails.0.address}}</p>
  <br/>
</template>

这里我将为每个用户的mongo文档返回_id,createdAt和电子邮件地址字段。您可以返回任何您喜欢的字段。请注意用于返回电子邮件地址的句柄语法。电子邮件是一个包含1个元素的数组,但我们使用emails.0访问元素,而不是电子邮件[0]

答案 1 :(得分:0)

你有从Meteor.presences.find()返回的文档中的用户ID吗?为什么不运行查询来从Mongo

获取单个用户对象
Meteor.users.findOne({_id: theIDFromDoc});