2017-03-06 2 views
0

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

Antwort

1

skills : [{ type: ObjectId, ref: 'Skill' }]. Drücken Sie einfach die IDs in das Array, wenn Sie beim Speichern oder Aktualisieren Fertigkeiten hinzufügen möchten.

Sie können das Array von Fähigkeiten bevölkern und Sie können das Skills-Array zählen. Das wird Ihnen die Zählung geben.

Wenn Sie last_performed im Skill-Modell haben. dann erhalten Sie Zugriff darauf, nachdem Sie

+0

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

+0

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. –

+0

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

Verwandte Themen