我需要在流星的用户集合中添加一个额外的字段。所以我正在做的是在下面的server.js文件中我正在添加以下代码。
//server.js
Meteor.publish("users", function () {
if (this.userId) {
return Meteor.users.find({_id: this.userId},
{fields: {'notified': 1}});
} else {
this.ready();
}
});
client.js如下:
// client.js
Deps.autorun(function() {
Meteor.subscribe('users');
});
fixture.js如下所示,以便在新用户登录时添加字段:
// fixture.js
Accounts.onCreateUser(function (options, user) {
if (options.profile) {
user.profile = options.profile;
user.profile.notified = false;
}
return user;
});
在代码中,我正在更新通知字段,如此
// inside a loop taking all the users of the collection
// where myUsers is the loop index.
Meteor.users.update(myUsers._id, {$addToSet: {notified : 1}});
但令我惊讶的是,当我通过mongo控制台或浏览器控制台检查字段是否已添加到集合中时,它没有显示出来。为什么这样?。我几乎阅读了网上提供的所有文章,并且跟着http://docs.meteor.com/#meteor_users,仍然无效。那么,谁知道应该做什么?我很无能。
答案 0 :(得分:0)
您没有写信给user.notified
,而是写信给user.profile.notified
。这是两个不同的领域!
答案 1 :(得分:0)
发布很好。
我用你的代码片段创建了一个项目,我看到了用户客户端通知的价值。我怀疑你实际上并没有更新用户。你想确保你在服务器端做这件事。
正如休伯特所说,你想确定你想要通知字段的位置。无论是在用户的基础还是在个人资料部分,要记住的是,如果它位于个人资料部分,则用户可以编辑自己的个人资料部分:
Meteor.users.update( Meteor.user()._id, { $set: { 'profile.notified': 1 } } );
检查已登录用户服务器端的所有字段,以确保通过添加此服务器端来获得通知值:
Meteor.methods({
user: function() {
console.log(Meteor.users.findOne(this.userId));
}
});
然后输入Meteor.call('user');在你的js控制台中。在终端窗口中查找结果。
也是你的行
Meteor.users.update(myUsers._id, {$addToSet: {notified : 1}});
会导致通知:
notified: [ 1 ]
即。 addToSet正在创建一个不存在的数组,然后将值1添加到它。
我还会查看你的循环代码。 myUsers是循环索引?它不应该是循环中的用户对象。
我希望更像是:
Meteor.users.find().forEach(function (user) {
Meteor.users.update( user._id, { $set: { notified: 1 } } );
});
如果您想要通知所有用户(您可能希望通过{notifications:0}来选择效率)。这也简单地通知:1而不是[1]