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

时间:2017-03-06 07:38:12

标签: node.js mongodb express mongoose mongoose-schema

我不确定在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,然后在用户模式中使用计数/日期。这个问题是,如果我在技能模式中添加另一项技能,则不会使用新技能更新用户的技能数组。我想每次添加/删除技能时更新每个用户,以反映新技能列表,这不是最佳方式。

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

将每个用户的计数/日期直接添加到技能架构会更好吗?唯一的问题是如果有成千上万的用户,这会有任何性能问题,并且很容易按每个用户的计数/日期对技能进行排序,并且单独查询用户的技能而不返回每个用户的计数用户?

干杯, 本

1 个答案:

答案 0 :(得分:1)

last_performed。如果要在执行保存或更新时添加技能,只需将ID推入阵列即可。

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

如果您在技能模型中有sh setmyenv.sh 。然后,在填充后,您将可以访问它