我不确定在MongoDB中设置它的最佳方法。
我有两个集合User
和Skill
。 Skill
的集合包含每个用户应具备的技能列表。
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
属性,其中包含日期他们上次表演了。
我的问题是,我希望每个用户的技能列表都相同,但我可以为每个用户唯一更新他们的count
和last_performed
属性。
我目前获得它的方式是引用技能ID,然后在用户模式中使用计数/日期。这个问题是,如果我在技能模式中添加另一项技能,则不会使用新技能更新用户的技能数组。我想每次添加/删除技能时更新每个用户,以反映新技能列表,这不是最佳方式。
您可以同步用户的技能数组以匹配技能模式吗?
将每个用户的计数/日期直接添加到技能架构会更好吗?唯一的问题是如果有成千上万的用户,这会有任何性能问题,并且很容易按每个用户的计数/日期对技能进行排序,并且单独查询用户的技能而不返回每个用户的计数用户?
干杯, 本
答案 0 :(得分:1)
last_performed
。如果要在执行保存或更新时添加技能,只需将ID推入阵列即可。
你可以填充技能数组,你可以计算技能数组。这会给你数数。
如果您在技能模型中有sh setmyenv.sh
。然后,在填充 p>后,您将可以访问它