上下文
我正在开发一个测试网络应用程序,用户可以用考试格式回答问题。
我目前有两个系列:
tests 集合中的每个文档都有一个questions
数组,其中包含 questions 集合中的Mongo文档ID。
我的问题......
是否可以(一次性/一次性):使用提供的Mongo ID在 tests 中检索特定文档,然后使用questions
数组中保存的Mongo ID (在该文档中)然后从问题中提取文档?
我最接近的猜测是使用Mongoose的DBRef惯例,但我不太清楚在这种情况下如何使用它(即使我这样做,我也不明白我怎么做检索多个问题并将其保存在单个测试中。)
我将非常感谢您的帮助!
PS 问题和测试的原因是分开的,以便我们可以在用户参加考试时随机化问题顺序web应用程序。
答案 0 :(得分:1)
走向另一个方向。将testId放在QRectF
模型上:
Question
你有三种情况;你的内存中有一个var TestSchema = new mongoose.Schema({
name: String
});
var Test = mongoose.model("Test", TestSchema);
var QuestionSchema = new mongoose.Schema({
testId: {
type: mongoose.Schema.ObjectId,
ref: "Test"
},
text: String,
answer: String
});
QuestionSchema.index({testId: 1})
var Question = mongoose.model("Question", QuestionSchema);
文档,你想找到它所属的question
:
test
或者您在内存中有一个Test.findOne({_id: question.testId},callback);
文档,并希望查找属于同一测试的所有question
:
questions
或者,您的内存中有一个Question.find({testId: question.testId}, callback);
文档,并希望找到所有文档test
:
questions
我看到Question.find({testId: test._id}, callback);
会弹出一个类似于你问题的答案。我想确保人们意识到populate()
不是SQL populate()
。来自文档:
已填充的路径不再设置为其原始_id,它们的值将替换为从数据库返回的mongoose文档,方法是在返回结果之前执行单独的查询。
JOIN
只是序列化第二个populate()
的语法糖。