Еще с одной траблой столкнулся в проекте.
Сохраняю заказ в базу.
controller/create.js
var order = new Order(req.body);
order.status = mongoose.Types.ObjectId(order.status);
order.client = order.client ? mongoose.Types.ObjectId(order.client) : null;
После этого в модели делаю виртуальное поле где обращаюсь к свойствам объекта client
models/order.js
OrderSchema.virtual('total').get(function() {
var order = this,
result = 0;
console.log('client, order.client);// Выдает ошибку
var sumPerHour = order.client.order.sumPerHour % 60; // часы превращаем в минуты
/*
тут делаю операции связанные расчетами итоговой суммы
...
*/
return result;
});
Запускается нормально, а при созданий заказа выдает ошибку и в консоли вместо объекта получаю _id объекта клиент.
Как обратится в таком случаю к свойствам client из модели order?
В схеме модели order свойство client прописан таким образом:
client: {
type: Schema.ObjectId,
ref: 'Client'
},
*********
А когда запрашиваю заказы, делаю популяцию, все норм, с этим нет проблем:
var populations = [{
path: 'driver',
select: 'name id car',
populate: {
path: 'car',
select: 'model name number',
model: 'Car' // модель с нижним регистром не находит
}
}, {
path: 'passengers',
populate: {
path: 'contact',
select: 'name phone'
}
}];
...
all: function(req, res) {
Order.find({}).sort('created')
.populate(populations)
.populate('user', 'name username')
.populate('client', 'name title places')
.populate('direction.from', 'address sum')
.populate('direction.to', 'address sum')
.populate('status', 'name key code')
.exec(function(err, orders) {
if (err) {
console.log('Cannot list the orders ' + err);
return res.status(500).json({
error: 'Cannot list the orders'
});
}
res.json(orders);
});
}