使用另一个集合中的文档中的属性将文档拖入一个集合中(Mongo,MEAN Stack)

时间:2015-11-11 04:58:36

标签: node.js mongodb mongoose mean-stack

上下文

我正在开发一个测试网络应用程序,用户可以用考试格式回答问题。

我目前有两个系列:

  • 测试
  • 问题

tests 集合中的每个文档都有一个questions数组,其中包含 questions 集合中的Mongo文档ID。

我的问题......

是否可以(一次性/一次性):使用提供的Mongo ID在 tests 中检索特定文档,然后使用questions数组中保存的Mongo ID (在该文档中)然后从问题中提取文档?

我最接近的猜测是使用Mongoose的DBRef惯例,但我不太清楚在这种情况下如何使用它(即使我这样做,我也不明白我怎么做检索多个问题并将其保存在单个测试中。)

我将非常感谢您的帮助!

PS 问题测试的原因是分开的,以便我们可以在用户参加考试时随机化问题顺序web应用程序。

1 个答案:

答案 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()的语法糖。