如何在mongodb中保存表单输入数组?

时间:2014-08-03 10:37:55

标签: node.js express mongoose pug

这是我正在使用的表格:

<form method="post" enctype="multipart/form-data">
  <label class="label">Class Name</label>
  <label class="input">
    <input type="text" name="class_name[]">
  </label>
  <label class="label">Grade</label>
  <label class="input">
    <input type="text" name="grade[]">
  </label>
</form>

以下是我正在使用的架构:

var SchoolSchema = new mongoose.Schema({
  classroom: [{
    Name: {
      type: String,
      required: true
    },
    grade: {
      type: Number,
      default: 1
    }
  }]
});

首先,我尝试使用以下功能保存数据:

var School = new mongoose.Schema.model('School');

exports.submit = function(req, res) {
  var classRooms = [];
  for (var i = 0; i < req.body.class_name.length; i++) {
    classRooms.push({Name: req.body.class_name[i], grade: req.body.grade[i]});
  }
  School.create({classroom: classRooms}, function(err, school) {
    ...
  });
};

当表单中只有一个条目时,它工作正常但是对于多个条目,它输入单个文档中的所有条目。例如,如果通过表格我输入

姓名:ABC等级:1 名称:EFG等级:2

此数据在数据库中保存为

classroom:[{Name:ABC,EFG, Grade:1,2}]

它应该像

classroom:[{Name:ABC, Grade:1},{Name: EFG, Grade:2}]

我甚至尝试更改功能如下:

var School = new mongoose.Schema.model('School');

exports.submit = function(req, res) {
  var classRooms = [];
  for (var i = 0; i < req.body.class_name[0].length; i++) {
    classRooms.push({Name: req.body.class_name[0][i], grade: req.body.grade[0][i]});
  }
  School.create({classroom: classRooms}, function(err, school) {
    ...
  });
};

现在这适用于多个条目,但是当我输入单个entrie时它没有按预期工作。对于例如如果我通过表单输入以下数据,

姓名:AB级:2

它以

的形式保存在数据库中
classroom:[{Name:A,Grade:2 },{Name:B,Grade:1}]

有谁请让我知道我在这里做错了什么以及如何纠正这个问题。谢谢!!

0 个答案:

没有答案