Meteor:返回Mongo的属性子集

时间:2016-03-05 09:39:00

标签: mongodb meteor

我查询Mongo以获取用户项,但我只想将信息的子集传递给模板。我目前的解决方案是:

var returnUsers = [];
var users = Meteor.users.find().fetch();

for (var i = 0; i < users.length; i++) {
    returnUsers.push(users[i].profile);
}

console.log(returnUsers);
return returnUsers;

但我失去了迭代器。理想情况下,我只想返回每个用户的配置文件对象。你是怎么做到的?

3 个答案:

答案 0 :(得分:2)

在客户端上执行此操作几乎没有意义。使用来自minimongo的字段返回光标通常与在javascript中过滤字段一样快或更快。

特别是,您希望从服务器中过滤出发布中的额外字段的Users集合。例如:

Meteor.publish('allUsers',function(){
  return Meteor.users.find({},{ fields: { profile: 1 }});
});

这将为每个用户发布profile数据 _id。然后当你做

Meteor.users.find({});

在客户端上,您只需获取profile数据和_id,而无需进行额外过滤。

请注意,fields选项仅允许您定义要一起包含或排除的一组字段。你不能混合包含和排除:

{ fields: { key1: 0, key2: 1 }}

会失败。

过滤客户端上的字段也没有任何安全优势。用户可以从控制台完全访问已发布的集合。

答案 1 :(得分:0)

use `map`

var profiles=Meteor.users.find().map(function(a){return a.profile}) 

答案 2 :(得分:0)

看到你想在上一个答案中按照评论保留光标,删除fetch,因为这会把它变成一个数组而不是一个光标并添加如下所示的字段

return Meteor.users.find({},{fields:{profile:1}});

这不会为您提供个人资料,但也会返回该ID,因为无论指定要返回的字段是什么,都会始终发送。