Meteor.user 客户端有附加字段
Meteor.user with Additional Fields on Client
在 Meteor 中,可以像这样将附加字段添加到新用户文档的根级别:
// See: https://guide.meteor.com/accounts.html#adding-fields-on-registration
Accounts.onCreateUser((options, user) =>
// Add custom field to user document...
user.customField = "custom data";
return user;
});
在客户端,可以像这样检索有关当前用户的一些数据:
// { _id: "...", emails: [...] }
Meteor.user()
默认情况下,返回的用户不存在customField
。如何通过 Meteor.user()
调用检索该附加字段,以便我们获得 { _id: "...", emails: [...], customField: "..." }
?目前,publishing custom data 上的文档似乎建议发布一个额外的集合。由于代码和流量的开销,这是不希望的。是否可以覆盖 Meteor.user()
调用的默认字段以提供其他字段?
您实际上误解了文档。它并不建议填充和发布一个单独的集合,只是一个单独的出版物。那不一样。您可以有多个 publications/subscriptions 都提供同一个集合。所以你需要做的就是:
服务器:
Meteor.publish('my-custom-user-data', function() {
return Meteor.users.find(this.userId, {fields: {customField: 1}});
});
客户:
Meteor.subscribe('my-custom-user-data');
您有几个解决方案可以用来解决这个问题。
- 空出版物
Meteor.publish(null, function () {
if (this.userId !== null) {
return Meteor.users.find({ _id: this.userId }, { fields: { customField: 1 } });
} else {
return this.ready();
}
}, { is_auto: true });
这会给你想要的结果,但也会导致额外的数据库查找。虽然这不是通过 _id 并且非常有效,但我仍然认为这是不必要的开销。
2.Updating Meteor 默认为用户发布的字段。
Accounts._defaultPublishFields.projection = { customField: 1, ...Accounts._defaultPublishFields.projection };
这必须在任何 Meteor.startup
块的 运行 之外。如果 运行 在一个之内,这将不起作用。此方法不会导致对您的数据库的额外调用,是我完成此操作的首选方法。
在 Meteor 中,可以像这样将附加字段添加到新用户文档的根级别:
// See: https://guide.meteor.com/accounts.html#adding-fields-on-registration
Accounts.onCreateUser((options, user) =>
// Add custom field to user document...
user.customField = "custom data";
return user;
});
在客户端,可以像这样检索有关当前用户的一些数据:
// { _id: "...", emails: [...] }
Meteor.user()
默认情况下,返回的用户不存在customField
。如何通过 Meteor.user()
调用检索该附加字段,以便我们获得 { _id: "...", emails: [...], customField: "..." }
?目前,publishing custom data 上的文档似乎建议发布一个额外的集合。由于代码和流量的开销,这是不希望的。是否可以覆盖 Meteor.user()
调用的默认字段以提供其他字段?
您实际上误解了文档。它并不建议填充和发布一个单独的集合,只是一个单独的出版物。那不一样。您可以有多个 publications/subscriptions 都提供同一个集合。所以你需要做的就是:
服务器:
Meteor.publish('my-custom-user-data', function() {
return Meteor.users.find(this.userId, {fields: {customField: 1}});
});
客户:
Meteor.subscribe('my-custom-user-data');
您有几个解决方案可以用来解决这个问题。
- 空出版物
Meteor.publish(null, function () {
if (this.userId !== null) {
return Meteor.users.find({ _id: this.userId }, { fields: { customField: 1 } });
} else {
return this.ready();
}
}, { is_auto: true });
这会给你想要的结果,但也会导致额外的数据库查找。虽然这不是通过 _id 并且非常有效,但我仍然认为这是不必要的开销。
2.Updating Meteor 默认为用户发布的字段。
Accounts._defaultPublishFields.projection = { customField: 1, ...Accounts._defaultPublishFields.projection };
这必须在任何 Meteor.startup
块的 运行 之外。如果 运行 在一个之内,这将不起作用。此方法不会导致对您的数据库的额外调用,是我完成此操作的首选方法。