我正在尝试从用户Collection中发布“朋友”。每个帐户都有一个字段可以保存所有朋友ID(称为地址簿)。但是发布不起作用我只获得自己的帐户(作为非管理员),例如如果我在控制台上调用Meteor.users.find()。fetch()。如果我按照控制台上方的方式记录以下内容:
I20140107-17:22:38.492(1)? --------------------------------------- [object Object]
I20140107-17:22:38.497(1)? [{_id:'X6XXyD64AW4CvXG6m',
I20140107-17:22:38.498(1)? createdAt:Tue Jan 07 2014 17:10:43> GMT + 0100(CET)
I20140107-17:22:38.498(1)?电子邮件:[[对象]],
I20140107-17:22:38.498(1)?服务:{密码:[对象],简历: [对象]},
I20140107-17:22:38.499(1)?用户名:'test'}]
所以没有提供地址簿
这是我的代码片段:
服务器:
Meteor.publish("users", function(){
if (Roles.userIsInRole(this.userId, ["admin"]))
return Meteor.users.find();
else
return Meteor.users.find({_id : this.userId}, {fields: {username: 1, id_:1, emails:1, addressbook:1, createdAt:1}});
});
Meteor.publish("friends", function(){
var addressbook = Meteor.users.find({_id: this.userId}, {limit:1} , {fields: {addressbook:1}});
console.log("---------------------------------------" + addressbook);
console.log(addressbook.fetch());
//return Meteor.users.find({_id :{ $in : addressbook}}, {fields : {username:1, emails: 1}});
客户端:
Deps.autorun(function() {
Meteor.subscribe("friends");
Meteor.subscribe("users");
});
如何将通过其ID存储的用户发布到字段地址簿(或至少是他们的电子邮件和用户名)?有没有更好的方法来组合发布?
提前致谢!
答案 0 :(得分:0)
您的friends
发布功能存在一些问题:
limit
- 只需使用findOne
。options
find
是一个对象。所以你想要:{limit: 1, fields: {addressbook: 1}}
findOne
)。fetch
是游标上可用的函数(find
的结果)。 addressbook
只是一个数组。看起来你是在正确的轨道上。试一试:
Meteor.publish('friends', function() {
var addressbook = Meteor.users.findOne(this.userId).addressbook || [];
return Meteor.users.find({_id: {$in: addressbook}}, {fields: {username: 1, emails: 1}});
});
但是,值得一提的是,如果friends
发生变化,addressbook
将不会被动。为此,您需要一个反应性连接。请参阅this问题。