我查询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;
但我失去了迭代器。理想情况下,我只想返回每个用户的配置文件对象。你是怎么做到的?
答案 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,因为无论指定要返回的字段是什么,都会始终发送。