MongoDB 为每个用户重复使用一个集合

MongoDB reusing a collection for every user

我不确定 MongoDB 中的最佳设置方式。

我有两个合集 UserSkillSkill 的集合列出了每个用户都应具备的技能。

var SkillSchema = new Schema({
    name: { type: String, required: true, trim: true },
    category: { type: String, required: true, trim: true }
});

mongoose.model('Skill', SkillSchema);

var UserSchema = new Schema({
    _id: { type: String, required: true, trim: true },
    first_name: { type: String, required: true, trim: true },
    last_name: { type: String, required: true, trim: true },
    email_address: { type: String, required: true, trim: true },
    skills: [{
        skill: { type: ObjectId, ref: 'Skill' },
        count: { type: Number, default: 0 },
        last_performed: { type: Date }
    }]
});

mongoose.model('User', UserSchema);

我想做的是有一个技能列表,每个用户都有一个 count 属性 来显示他们执行该技能的次数,还有一个 last_performed 属性 有他们上次执行它的日期。

我的问题是,我希望每个用户的技能列表都相同,但我可以为每个用户更新他们唯一的 countlast_performed 属性。

我目前获得它的方式是引用技能 ID,然后在用户模式中包含 count/date。这个问题是,如果我向技能模式添加另一个技能,用户的技能数组将不会用新技能更新。我认为每次我 add/remove 一项技能时更新每个用户,以反映新技能列表,并不是执行此操作的最佳方式。

你能同步用户的技能数组以匹配技能模式吗?

将每个用户的 count/date 直接添加到技能架构中会不会更好?唯一的问题是如果有成千上万的用户,这会不会有任何性能问题,并且是否可以很容易地为每个用户按 count/date 对技能进行排序,并在不返回计数的情况下单独查询用户的技能每个用户?

干杯, 本

skills : [{ type: ObjectId, ref: 'Skill' }]。如果您想在保存或更新时添加技能,只需将 ID 推入数组即可。

你可以填充技能数组,你可以计算技能数组。那会给你计数。

如果您在技能模型中有 last_performed。然后您将在填充后访问它