【问题标题】:Can't save Data in Json Format in Mongodb无法在 Mongodb 中以 Json 格式保存数据
【发布时间】:2021-10-11 15:01:02
【问题描述】:

在这个应用程序中,我在 Mongodb 中保存了 term_id、course_id 和 Subject。我需要的只是将主题保存为 Json 格式。我想用相同的 id 保存 term_id 、 course_id 并将 Subject 保存在 Json 中(不在数组中) - 用于 semeter 和 course。我正在将主题保存在数组中,并且我是 Angular 的新手。谁能帮我吗。提前致谢。


    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var SubjectSchema = new Schema({
      semesterId:{type: String,ref:'semesterNew'},
      courseId :{type: String,ref:'CollegeCourse'},
      subject:{
        subject :{ type:String}
       },
      createdOn : {type:Date,default:Date.now},
      updatedOn : {type:Date,default:Date.now},
    
    });
    
    mongoose.model('Subject',SubjectSchema);

  
 router.post('/addSubject',function(req,res){
    var subjects = JSON.stringify(req.body.subject);    
    var subjectData = new subjectModel({
      semesterId:req.body.semesterId,
      courseId: req.body.courseId,
      subject: subjects,
    });
    subjectData.save(function (err, result) {
      if (err) {
        console.error(err);
        return res.status(400).json({
          message: 'Bad Request'
        });
      } else {
        res.json({
          status: 200,
          data: result
        })
       
        console.log('Check',result);
      }
    });
  });

addSubject(item){
      return this.api.post(`${this.apiController}/addSubject`,item);
   }


saveSubject() {
    const config = {
      position: NbGlobalPhysicalPosition.BOTTOM_RIGHT
    };
    const formData = new FormData();
    this.subjectMasterForm.controls.semesterCtrl.markAsDirty();
    this.subjectMasterForm.controls.collegeCourseCtrl.markAsDirty();
    // this.subjectMasterForm.controls.image.markAsDirty();
  
    var all_subject_array = [];
    if (this.subjectMasterForm.valid && this.subjectMasterForm.value.subjects.length > 0) {
      if (this.semesterSubjectId == '' || this.semesterSubjectId == null || this.semesterSubjectId == 'undefined' || this.semesterSubjectId== undefined) {
        
        var subjects_values = this.subjectMasterForm.value.subjects
        var subjects_length = this.subjectMasterForm.value.subjects.length;
        
        subjects_values.forEach(function (element) {
          all_subject_array.push(element.name);
          console.log('Check2',element.name);
     
        });

        this.overview_data = {
          courseId: this.courseId,
          semesterId:this.semesterId,
          subject: all_subject_array,
          semesterSubjectId: this.semesterSubjectId,
        }
        this.collegeTemplateApi.addSubject(this.overview_data).subscribe(data => {
          if (data['status'] == 200) {
            this.toasterService.show("Subject successfully Added!!!..", `Success`, config);
          } else {
            this.toasterService.show("Subject Already exists in our Database!!!...", `Success`, config)
          }
        });
      } else {
        if(this.courseId!=undefined && this.semesterId!=undefined){
        if (this.subjectMasterForm.value.subjects.length > 0) {
          var subjects_values = this.subjectMasterForm.value.subjects
          var subjects_length = this.subjectMasterForm.value.subjects.length;
          subjects_values.forEach(function (element) {
            all_subject_array.push(element.name);
          });
          this.overview_data = {
            courseId: this.courseId,
            semesterId:this.semesterId,
            subject: all_subject_array,
            semesterSubjectId: this.semesterSubjectId
          }
        }
        this.collegeTemplateApi.updateSubject(this.overview_data).subscribe(data => {
          if (data['status'] == 200) {
            this.toasterService.show("Subject successfully Updated!!!..", `Success`, config);
          } else {
            this.toasterService.show(data['message'], `Success`, config)
          }
        });
      }
      }
    } else if (this.subjectMasterForm.value.subjects.length == 0) {
      this.subjecterror = true;
    }
    setTimeout(() => this.ngOnInit(), 3000);

  }

【问题讨论】:

  • JSON 不是数组是什么意思?您存储在 MongoDB 中的对象,您能详细说明一下吗?
  • 你得到什么错误信息?
  • @DanNagle 使用上述解决方案,我将 sem_id、course_id 和主题存储在 mongodb 中。但问题是我需要用唯一的 id 区分每个主题,这就是为什么我在模式中创建一个名为主题内部主题的新字段,但数据没有保存在 mongodb 中。
  • @CodeChanger 数据以数组的形式存储在 mongodb 中。我正在编码,以便数据可以存储在每个新列的主题字段中,为 sem_id 和 course_id 选择相同的 id。

标签: node.js angular mongodb express


【解决方案1】:

在您的第一个代码段中,Subject 模型未分配给变量。

mongoose.model('Subject',SubjectSchema);

但稍后在您的代码中声明subjectModel 的新实例。

尝试将模型分配给此名称。

var subjectModel = mongoose.model('Subject', SubjectSchema);

【讨论】:

  • @DanNagle我试过你的解决方案没用。
  • 也许你应该为你的代码写一些测试来帮助调试过程。
猜你喜欢
  • 2023-03-29
  • 2016-10-23
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多