Всякий раз, когда я звоню клиенту, он отображает полный JSON клиентского документа в клиенте [0].Я хочу иметь возможность вызывать work.client.name и work.client.url и тому подобное.К сожалению, если это дубликат вопрос, я искал долго и упорно и не нашел ответа.
1002 * Контроллер работа
exports.work_detail = function(req, res, next) {
async.parallel({
work: function(callback) {
Work.findById(req.params.id)
.populate('client')
.exec(callback);
}
}, function(err, results) {
if (err) { return next(err); }
if (results.work==null) { // No results.
var err = new Error('Work not found');
err.status = 404;
return next(err);
}
// Successful, so render.
console.log(results.work.client.name);
res.render('work/work_detail', { title: 'Work Details', work: results.work } );
});
};
Работа модель
var workSchema = new Schema({
client: [{ type: Schema.Types.ObjectId, ref: 'Client', required: true }],
time: {
type: Number,
},
work_done: {
type: Array,
},
work_value: {
type: [{}],
},
total: {
type: Number,
// set: calculateValue
},
work_address: {
type: String,
},
note: {
type: String,
}
}, {
timestamps: true
});
Theмодель клиента
var clientSchema = new Schema({
first_name: {
type: String,
required: true,
set: firstToUpper
},
last_name: {
type: String,
required: true,
set: firstToUpper
},
address: {
type: String,
required: false,
},
phone: {
type: Number,
required: false,
},
email: {
type: String,
required: false,
lowercase: true
},
note: {
type: String,
required: false,
}}, {
timestamps: true,
toObject: { virtuals: true },
toJSON: { virtuals: true },
});
// Capitalize first letter of each word when called
function firstToUpper (string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
// Virtual for client's full name
clientSchema
.virtual('name')
.get(function () {
return this.first_name + ' ' + this.last_name;
});
// Virtual for clients's URL
clientSchema
.virtual('url')
.get(function () {
return '/invoice/client/' + this._id
});