【问题标题】:Update extended Meteor.user collection更新扩展 Meteor.user 集合
【发布时间】:2015-09-19 02:10:54
【问题描述】:

我已通过meteor-collection2 用户资料扩展

用户资料

/// --- User Profile --- ///
UserProfile = new Mongo.Collection("userprofile");
Schema.UserProfile = new SimpleSchema({
    userName: {
        type: String,
        optional: true
    },
    userGender: {
        type: String,
        allowedValues: ['Male', 'Female'],
        optional: true
    },
    userAge: {
        type: Number,
        optional: true,
        regEx: /^[0-9]{2}$/
    },
    userWeight: {
        type: Number,
        decimal: true,
        optional: true
    },
    userGrowth: {
        type: Number,
        optional: true
    },
    userExpirience: {
        type: Number,
        optional: true
    },
    userAvatarId: {
        type: String,
        optional: true
    },
    profileComplete: {
        type: Boolean,
        optional: true
    }
});
UserProfile.attachSchema(Schema.UserProfile);

用户

/// --- User --- ///
Schema.User = new SimpleSchema({
    username: {
        type: String,
        regEx: /^[a-z0-9A-Z_]{3,15}$/
    },
    emails: {
        type: [Object]
    },
    "emails.$.address": {
        type: String,
        regEx: SimpleSchema.RegEx.Email
    },
    "emails.$.verified": {
        type: Boolean
    },
    createdAt: {
        type: Date
    },
    profile: {
        type: Schema.UserProfile,
        optional: true
    },
    services: {
        type: Object,
        optional: true,
        blackbox: true
    },
    // Add `roles` to your schema if you use the meteor-roles package.
    // Option 1: Object type
    // If you specify that type as Object, you must also specify the
    // `Roles.GLOBAL_GROUP` group whenever you add a user to a role.
    // Example:
    // Roles.addUsersToRoles(userId, ["admin"], Roles.GLOBAL_GROUP);
    // You can't mix and match adding with and without a group since
    // you will fail validation in some cases.
    roles: {
        type: Object,
        optional: true,
        blackbox: true
    },
    // Option 2: [String] type
    // If you are sure you will never need to use role groups, then
    // you can specify [String] as the type
    roles: {
        type: [String],
        optional: true
    }
});
Meteor.users.attachSchema(Schema.User);

但我无法更新用户的任何属性,例如 useAge

当我尝试这样做时:

Meteor.users.update({_id: userId}, {$set: {userAge: 30}}, {validate: false});

它会破坏用户的数据并且集合只包含id

第二个问题:如何从用户个人资料中检索数据?

【问题讨论】:

    标签: mongodb meteor meteor-collection2


    【解决方案1】:

    您覆盖了用户的全部内容,而不仅仅是配置文件中的 userAge。 我认为下面的小改动将解决您的问题:

    Meteor.users.update({_id: userId}, {$set: {profile.userAge: 30}}, {validate: false});

    我不知道你所说的“ex age”是什么意思,那个时代的历史?

    【讨论】:

    • 你好,k.chao。我的意思是如何从扩展的用户集合中获取数据。例如获取 userAge 的值。
    • 并回答第二个问题。要获得 userAge 的价值,我应该使用这个:Meteor.users.findOne({}).profile.userAge
    • mongoDB findOne 操作实际上是异步完成的,所以你的方法是行不通的(除非你在服务器上做)。你需要的是一个回调函数:Meteor.users.findOne({}, function(err, res) { console.log(res.profile.userAge); })
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多