我的活动模型有一个属性,它是对units表中ObjectId的引用。在我看来,该方法工作正常,因为控制台日志记录NSString *filePath;
#ifdef DEBUG
filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Debug" ofType:@"plist"];
#else
filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Production" ofType:@"plist"];
#endif
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
[FIRApp configureWithOptions:options];
记录正确的名称,也从不命中catch子句,因此检索名称时没有错误,因此我假设它也被返回。
不幸的是,假设unit.name
是一个活动实例,在我的视图中调用activity
会返回undefined,我的视图显示为undefined。正确打印所有其他属性:
我的活动模型的架构:
activity.unit_id
以下是我在var activitySchema = new Schema({
name: {
type: String,
required: true
},
description: {
type: String,
required: true
},
pointsPerUnit: {
type: Number,
required: true
},
unit_id: {
type: Schema.Types.ObjectId,
ref: 'Unit',
get: function(unit_id) {
Unit.findById(unit_id).then((unit) => {
console.log(unit.name)
return unit.name
}).catch((e) => console.log(e));
}
}
});
文件中调用的内容:
.pug
我也明确地将h2 All Activities
each activity in activities
p= "Name: " + activity.name
p= "Description: " + activity.description
p= "Points Per Unit of Excersise: " + activity.pointsPerUnit
p= "Unit: " + activity.unit_id
hr
个查询记录到我的控制台。这是mongoose
的执行,这也是正确的:
mongoose
以下是路线的控制器代码:
Mongoose: units.findOne({ _id: ObjectId("592679205a7b0e0c8fe7f47f") }, { fields: {} })
Mongoose: units.findOne({ _id: ObjectId("592679205a7b0e0c8fe7f47f") }, { fields: {} })
在这个问题上花了两个小时没有运气!任何帮助表示赞赏。
答案 0 :(得分:1)
您正尝试使用异步方法在架构中定义“getter”。而不是这样做,你应该在控制器中调用.populate()
:
活动架构
var activitySchema = new Schema({
name: {
type: String,
required: true
},
description: {
type: String,
required: true
},
pointsPerUnit: {
type: Number,
required: true
},
unit_id: {
type: Schema.Types.ObjectId,
ref: 'Unit',
}
});
控制器代码
/* GET users listing. */
router.get('/new', function(req, res, next) {
Activity.find({}).populate('unit_id').then((activities) => {
res.render('activities/new', {activities});
});
});
这可确保在调用模板之前解析Unit
中的对象。