Ich bin mir nicht sicher, der beste Weg, dies in MongoDB einzurichten.MongoDB Wiederverwendung einer Sammlung für jeden Benutzer
Ich habe zwei Sammlungen User
und Skill
. Die Sammlung für Skill
enthält eine Liste von Fähigkeiten, die jeder Benutzer haben sollte.
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);
Was ich versuche, eine Liste von Fähigkeiten zu tun ist, hat, und jeder Benutzer hat eine count
Eigenschaft, die zeigt, wie oft sie die Geschicklichkeit durchgeführt haben, und eine last_performed
Eigenschaft, die das Datum hat sie es zuletzt durchgeführt .
Mein Problem ist, ich möchte die Liste der Fähigkeiten für jeden Benutzer gleich sein, aber ich kann ihre count
und last_performed
Eigenschaften für jeden Benutzer eindeutig aktualisieren.
Die Art, wie ich es habe derzeit bezieht sich auf die Fähigkeit ID, und dann die Anzahl/Datum im Benutzerschema. Das Problem dabei ist, dass wenn ich dem Skill-Schema eine weitere Fähigkeit hinzufüge, das Skill-Array des Benutzers nicht mit der neuen Fertigkeit aktualisiert wird. Ich denke, jeden Benutzer jedes Mal zu aktualisieren, wenn ich eine Fähigkeit hinzufüge/entferne, um die neue Fähigkeitsliste wiederzugeben, wäre das nicht der optimale Weg, dies zu tun.
Können Sie das Skill-Array des Benutzers mit dem Skills-Schema synchronisieren?
Wäre es besser, die Anzahl/das Datum jedes Benutzers direkt dem Skill-Schema hinzuzufügen? Das einzige Problem dabei ist, wenn es Tausende von Benutzern gibt, hätte dies Leistungsprobleme, und wäre es einfach genug, die Fähigkeiten nach Anzahl/Datum für jeden Benutzer zu sortieren und die Fähigkeiten des Benutzers einzeln abzufragen, ohne die Zählungen für jeden zurückzugeben Benutzer?
Cheers, Ben
ausgefüllt haben Die "count" -Eigenschaft zählt die Anzahl der Male, die der Benutzer die Fähigkeit durchgeführt hat, nicht wie viele Fähigkeiten es gibt. Entschuldigung für die Verwirrung. Die Eigenschaften "count" und "last_performed" sind ebenfalls für jeden Benutzer eindeutig. – Ben
Vielleicht aktualisieren Sie die Zählung in den Fähigkeiten und Sie könnten immer noch bevölkern. Ich meine, setze die Anzahl in das Skill-Schema. Sehen Sie sich auch virtuals an. –
Danke, das scheint der einfachste Weg zu sein. Ich war mir nicht sicher, ob das Speichern von Tausenden von "count" und "last_performed" Werten in jeder Fertigkeit (einmal für jeden Benutzer) ein Treffer für die Leistung wäre, wenn man sie abfragt oder nicht. – Ben