【问题标题】:Multiple subdocuments in MongooseMongoose 中的多个子文档
【发布时间】:2020-03-31 16:34:23
【问题描述】:

Mongoose 是否可以有多个不同的子文档?我正在为在线测试创建应用程序,每个测试都有包含不同问题类型的问题数组,例如真/假、多项选择、匹配等......我想创建不同的问题模式和问题数组来包含它们.例如questions: [QuestionSchema1, QuestionSchema2]。有可能吗?

下面有基本问题类型的架构示例。如果我想为此测试添加不同类型的问题怎么办?

const testSchema = new mongoose.Schema({
  name: {
    type: String
  },
  level: {
    type: String
  },
  questions: [
    {
      id: {
        type: String
      },
      question: {
        type: String
      },
      answers: [
        {
          id: {
            type: String
          },
          answer: {
            type: String
          }
        }
      ],
      validAnswerId: {
        type: String
      }
    }
  ]
});

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

    如果您真的想对子文档执行此操作,您只需将问题输入为对象数组,然后将您想要的任何内容放入其中:

    ...
    questions: [{
      type: Object
    }],
    ...
    

    如果您可以创建多个集合,您可以使用 mongooses refPath 来使用更严格的模式:

    ...
    questions: [{
      question: {
        type: ObjectId,
        refPath: 'questions.questionType'
      },
      questionType: {
        type: String,
        enum: ['MultipleChoice', 'Matching', ...]
     },
    }]
    ...
    

    然后您可以为您的问题创建所有不同的模式,并将它们的模型(如'MultipleChoice''Matching')添加到questionType 枚举。之后,当您需要访问问题时,您只需在查询对象上使用 .populate('questions') 填充它们。

    【讨论】:

    • 惊人的@als。如果您可以在回复中包含一个完整的示例,那就太好了。我花了一点时间才明白你的意思:) 以防万一,在refPath 链接中你可以看到一个完整的例子:
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2020-07-16
    • 2017-10-01
    • 1970-01-01
    • 2016-12-14
    • 2020-10-23
    相关资源
    最近更新 更多