Angenommen, ich habe folgende Schemata:Bestell zwei Referenzanordnungen zusammen
var QuizSchema = new mongoose.Schema({
name: { type: String, required: true },
questions: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Question' }],
questionGroups: [{ type: mongoose.Schema.Types.ObjectId, ref: 'QuestionGroup' }]
});
var QuestionSchema = new mongoose.Schema({
number: { type: String, required: true }, // e.g. 1, a, i, anything
question: { type: String, required: true },
type: { type: String, enum: ['multiple choice', 'multiple select', 'short answer'] },
choices: [String],
answers: [String]
});
var QuestionGroupSchema = new mongoose.Schema({
number: { type: String, required: true }, // e.g. 1, a, i, anything
prompt: { type: String },
questions: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Question' }]
});
Ich versuche, einen Weg entwerfen, die mir erlaubt, Fragen und Fragengruppen zusammen zu bestellen.
Ich dachte, vielleicht ein neues Feld der Zugabe order
var QuizSchema = new mongoose.Schema({
// ...
order: [
{
type: { type: String, enum: ['Question', 'QuestionGroup'] },
id: mongoose.Schema.Types.ObjectId // reference
}
]
});
, so dass in der Datenbank, das Feld etwas wie
[
{ type: 'Question', id: ObjectId('57867a34567g67790') },
{ type: 'Question', id: ObjectId('57867a34567g67765') },
{ type: 'QuestionGroup', id: ObjectId('69864b64765y45645') },
{ type: 'Question', id: ObjectId('57867a34567g67770') },
{ type: 'QuestionGroup', id: ObjectId('69864b64767y45647') }
]
Dies kann bedeuten, enthalten würde, dass ich brauchen würde, um " füllen Sie "die geordnete Liste von Fragen und Fragengruppen als
quiz.populate('questions questionGroups').exec(function (err, quiz) {
// sort questions and groups by the order
quiz.order = quiz.order.map(function (o) {
if (o.type === 'QuestionGroup') {
return quiz.questionGroups.id(o.id);
}
return quiz.questions.id(o.id);
});
});
Also meine Frage: Gibt es einen besseren Weg dies zu gestalten?
Sie wollen Fragen und Fragen in einem Array nacheinander, wenn Sie ein Quiz finden? –
@TalhaAwan Das ist in etwa richtig. Ihre Reihenfolge kann sich jedoch ändern. – Mikey