使用来自另一个集合(Mongo,MEAN Stack)中文档的属性拉取一个集合中的文档



上下文:

我正在开发一款考试网络应用程序,用户可以在该应用程序中以考试形式回答问题。

我目前有两个收藏:

  • 测试
  • 问题

测试集合中的每个文档都有一个questions数组,该数组包含问题集中文档的Mongo ID。

我的问题

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

我最接近的猜测是使用Mongoose的DBRef约定,但我不太明白如何在这种情况下使用它(即使我理解了,我也不明白如何在一个测试中检索多个问题并保存它们)。

我将感谢所有人的帮助!

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

转到另一个方向。将testId放在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()弹出作为任何类似你的问题的答案。我想确保人们意识到populate()不是SQL JOIN。来自文档:

填充的路径不再设置为其原始_id,在返回结果之前,通过执行单独的查询,将其值替换为从数据库返回的mongoose文档。

CCD_ 13只是用于序列化第二个CCD_。

最新更新