更新对象MongoDB的对象数组

时间:2018-10-12 08:24:40

标签: node.js mongodb express mongoose

我有这个模型

student: {
   package:{
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Package',
   },
   history: [
    {
      package: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Package',
      },
      orderDate: {
        type: Date,
        default: new Date().toLocaleDateString('id'),
      },
      Status: {
        type: String,
        default: 'Pending',
      },
    },
  ],
}

我想做的是我想一次通过更新Student.packageStudent.history

我在模型

中创建此方法
StudentSchema.methods.updatePackage= function(idPackage) {
  this.package = idPackage;
  return this.save();
};

StudentSchema.methods.updateHistory= function(idPackage) {
  this.history.push(idPackage);
  return this.save();
};

并且我正在尝试在我的控制器

中执行类似的操作
buyPack: async (req, res, next) => {
    try {
      let dataStudent = await Student.findById('5b83443040e3751bb4e32a21');
      await dataStudent.updatePackage(req.body);
      await dataStudent.updateHistory(req.body);
      return res.json(dataStudent);
    } catch (err) {
      console.log(err);
      next(err);
    }
  },

我认为第一第二方法是错误的,但是我试图在半天之内解决它,但是仍然没有运气。实现目标的最佳方法是什么?

我的模型弄错了吗?还是我创建的方法不正确?

1 个答案:

答案 0 :(得分:1)

用复数..重命名猫鼬模型,而用“ S”表示单数,“包”将其更改为“包”