【发布时间】:2017-07-25 23:47:13
【问题描述】:
我不确定在 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,然后在用户模式中包含计数/日期。这样做的问题是,如果我向技能模式添加另一个技能,用户的技能数组将不会使用新技能进行更新。我认为每次添加/删除技能时都更新每个用户以反映新技能列表,这不是执行此操作的最佳方式。
您能否同步用户的技能数组以匹配技能架构?
直接将每个用户的计数/日期添加到技能架构中会更好吗?唯一的问题是,如果有成千上万的用户,这是否会有任何性能问题,并且是否很容易按每个用户的计数/日期对技能进行排序,并单独查询用户的技能而不返回每个用户的计数用户?
干杯, 本
【问题讨论】:
标签: node.js mongodb express mongoose mongoose-schema