从一组用户过滤用户ID

时间:2016-03-28 08:38:02

标签: javascript mongodb meteor

我希望找到所有用户,而不是当前用户。一对用户存储在" Room"此集合结构下的数组:

每个房间的结构(来自另一个html页面)

var newRoom = Rooms.insert({
   owner    : Meteor.userId(),
   receiver : receiver,
   people   : [ owner , receiver ],
}); 

Collection.js(使用dburles集合助手)

Rooms.helpers({
  receiverName: function() {  
    return Meteor.users.findOne({ _id: this.receiver }).username; 
  }
});

html

<!-- **allRooms.html** Works fine, names appear --> 
  {{#each rooms}} {{receiverName}}{{/each }}

<!-- **roomDetail.html**  names dont show, this.receiver undefined --> 
    {{receiverName}} 

roomDetail js模板助手

self.subscribe('room', Router.current().params._id);
self.subscribe('users');
});  

如何从people字段中返回并显示不是当前用户的用户ID?我希望在子页面(roomDetail)中显示它。

1 个答案:

答案 0 :(得分:1)

假设:

  • Rooms是一个集合,您已经有一个room文档可供搜索。
  • 您只想获取一个用户。

尝试一下:

// The list of userIds in room minus the current user's id.
var userIds = _.without(room.People, Meteor.userId());

// Assuming we want only one user...
var user = Meteor.users.findOne({ _id: userIds[0] });

关于原始代码的一些想法:

  • 除非Rooms是用户字段,否则您无法在Meteor.users选择器中添加对Rooms的引用。 Mongo没有加入的概念。
  • $ne不是你想要的。如果您发布了100个用户,并且您的阵列中只包含2个用户(其中​​一个您不想要),则使用$ne将返回99个用户。

根据您的评论,您似乎需要collection helper。也许是这样的:

Rooms.helpers({
  findUser: function() {
    var userIds = _.without(this.People, Meteor.userId());
    return Meteor.users.findOne({ _id: userIds[0] });
  },
});

然后在您的代码中的其他位置,对于您可以执行的给定room实例:

room.findUser()