wolf47
@wolf47
Айтишник, немного програмирую на JS

Как вместо _id получить объект?

Еще с одной траблой столкнулся в проекте.

Сохраняю заказ в базу.
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 объекта клиент.
CQtB5U4.png

Как обратится в таком случаю к свойствам 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);
                });
        }
  • Вопрос задан
  • 700 просмотров
Решения вопроса 1
@mmxdesign
Software Engineer
var order = new Order(req.body);
            order.status = mongoose.Types.ObjectId(order.status);

           /* здесь вы сами же перезаписываете ваш объект в ID*/
          /* order.client = order.client ? mongoose.Types.ObjectId(order.client) : null; */
        order.client = order.client ? order.client : null;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы