猫鼬填充Express,无法在生产环境中使用(Heroku)

时间:2018-11-14 02:33:48

标签: mongodb heroku populate

这是一个MERN应用,托管在github上,在本地主机上完全可以正常运行。不幸的是,它在Heroku上不起作用。

问题是API请求,它必须返回一个对象并填充OID数组(请参见部门模型)。 API请求正在运行。我从MLab获取数据,但没有 填充 ...却返回了:"surveys":[]

API文件

router.get('/department_data/:d_oid', function(req, res) {
     Department.findOne({_id: req.params.d_oid}).populate("surveys").exec(function(err,doc){
          if(err) throw(err)
          res.send(doc)
     })
});

部门模型

**Department Model**
var mongoose = require("mongoose");
var Schema = mongoose.Schema;

// Create the survey schema
var departmentSchema = new Schema({

  department_name: {
    type: String,
    trim: true,
    required: true
  },

  surveys: [{
    type: Schema.Types.ObjectId,
    ref: 'Surveys'
  }],

  participants: [{
    type: String
  }],

  create_date: {
    type: Date,
    default: Date.now
  },

  created_by: {
    type: Schema.Types.ObjectId,
    ref: 'Created_By'
  },
});

departmentSchema.index({ department_name: 1, created_by: 1}, {unique: true});

const Department = mongoose.model('Departments', departmentSchema);

module.exports = Department;

调查模型

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

// Create the survey schema
var surveySchema = new Schema({

  survey_name: {
    type: String,
    trim: true,
    required: true
  },

  questions: [{
      type: Schema.Types.ObjectId,
      ref: 'Questions'
  }],

  created_date: {
     type: Date,
     default: Date.now
  }
});

const Survey = mongoose.model('Surveys', surveySchema);

module.exports = Survey;

1 个答案:

答案 0 :(得分:0)

已解决。

问题出在数据库中:ref OID被先前的更新打乱了,所以当它试图填充时,Mongoose找不到任何匹配的OID。

解决方案:我们必须清除并重新播种。当存在正确的OID引用时,此代码将在localhost和Heroku中按预期工作。