You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mongoose的Quiz Schema中实现数据创建与更新?

Mongoose Quiz 数据插入与更新问题解决

首先明确核心问题:你的Schema里题目字段拼写错误,写成了qusetions(正确应为questions),这就是插入时该字段始终为空的原因——你插入数据时大概率用了正确拼写的questions,和Schema里的字段名不匹配,导致数据没被存入。

建议先修正Schema中的字段名,把qusetions改成questions,避免后续维护出现混淆。


数据插入(使用create方法)

修正Schema后,按以下示例插入数据,确保字段名和Schema完全一致:

const Quizmodel = require('./path/to/Quizmodel');

// 构造Quiz数据
const newQuizData = {
  course: '650abc123def456ghi789', // 替换为实际的course ObjectId
  topic: '650def456ghi789abc123', // 替换为实际的topic ObjectId
  quiztime: new Date('2024-10-05 14:00:00'),
  allowedtime: new Date('2024-10-05 14:45:00'),
  questions: [
    {
      questiontext: 'Node.js是什么类型的运行环境?',
      correctans: 'JavaScript运行时',
      opt1val: 'JavaScript运行时',
      opt2val: 'Python框架',
      opt3val: '数据库管理系统',
      opt4val: '前端构建工具'
    },
    {
      questiontext: 'Mongoose用于操作哪种数据库?',
      correctans: 'MongoDB',
      opt1val: 'MySQL',
      opt2val: 'MongoDB',
      opt3val: 'PostgreSQL',
      opt4val: 'Redis'
    }
  ],
  students: [] // 初始无学生答题,可留空
};

// 执行插入
Quizmodel.create(newQuizData)
  .then(createdQuiz => console.log('数据插入成功:', createdQuiz))
  .catch(err => console.error('插入失败:', err));

如果暂时不想修改Schema,插入时必须使用qusetions作为字段名,但强烈建议修正拼写错误。


数据更新

1. 给Quiz添加题目

使用$push添加单题,或$push配合$each批量添加:

// 添加单个题目
Quizmodel.findByIdAndUpdate(
  '650xyz789abc123def456', // 目标Quiz的ObjectId
  {
    $push: {
      questions: {
        questiontext: 'Express是什么?',
        correctans: 'Node.js web框架',
        opt1val: 'Node.js web框架',
        opt2val: '数据库',
        opt3val: '编程语言',
        opt4val: '操作系统'
      }
    }
  },
  { new: true } // 返回更新后的完整文档
)
.then(updatedQuiz => console.log('添加题目成功:', updatedQuiz))
.catch(err => console.error('添加失败:', err));

// 批量添加题目
Quizmodel.updateOne(
  { _id: '650xyz789abc123def456' },
  {
    $push: {
      questions: {
        $each: [
          {
            questiontext: 'MongoDB是哪种数据库?',
            correctans: '非关系型数据库',
            opt1val: '关系型',
            opt2val: '非关系型',
            opt3val: '内存型',
            opt4val: '列式'
          },
          {
            questiontext: 'Mongoose的Schema作用是?',
            correctans: '定义数据结构',
            opt1val: '定义数据结构',
            opt2val: '执行SQL查询',
            opt3val: '处理HTTP请求',
            opt4val: '存储文件'
          }
        ]
      }
    }
  },
  { new: true }
)
.then(result => console.log('批量添加成功:', result))
.catch(err => console.error('批量添加失败:', err));

2. 修改特定题目

通过匹配题目属性(如questiontext)定位并修改:

Quizmodel.updateOne(
  { 
    _id: '650xyz789abc123def456',
    'questions.questiontext': 'Node.js是什么类型的运行环境?'
  },
  {
    $set: {
      'questions.$.correctans': '基于Chrome V8引擎的JavaScript运行时',
      'questions.$.opt1val': '基于Chrome V8引擎的JavaScript运行时'
    }
  }
)
.then(result => console.log('题目修改成功:', result))
.catch(err => console.error('修改失败:', err));

3. 添加学生答题记录

给students数组添加学生信息及所选答案:

Quizmodel.findByIdAndUpdate(
  '650xyz789abc123def456',
  {
    $push: {
      students: {
        student: '651abc456def789ghi123', // 实际学生的ObjectId
        selectedans: [
          { anstext: 'JavaScript运行时' },
          { anstext: 'MongoDB' }
        ]
      }
    }
  },
  { new: true }
)
.then(updatedQuiz => console.log('学生答题记录添加成功:', updatedQuiz))
.catch(err => console.error('添加失败:', err));

内容的提问来源于stack exchange,提问作者Waqar Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:05:34