Я пытаюсь выполнить множественное заполнение, пока выполняется только последнее заполнение.

Вот мой код,

router.get("/", (req, res, next) => {
  Order.find()
    .select("product quantity _id")
    .populate('product', 'name')
    .populate('product', 'price')
    .populate('product','productImage')
    .exec()
    .then(docs => {
      res.status(200).json({
        count: docs.length,
        orders: docs.map(doc => {
          return {
            _id: doc._id,
            product: doc.product,
            productImage: doc.productImage,
            name: doc.name,
            price: doc.price,
            quantity: doc.quantity,
            request: {
              type: "GET",
              url: "http://localhost:3000/orders/" + doc._id
            }
          };
        })
      });
    })
    .catch(err => {
      res.status(500).json({
        error: err
      });
    });
});

Я получаю только изображение продукта. Если я удалю productImage, я получу цену. Короче говоря, работает только последнее заполнение

Я получаю это в качестве вывода

> {
>     "count": 2,
>     "orders": [
>         {
>             "_id": "5ba8cb0016e76b50288e67ba",
>             "product": {
>                 "_id": "5ba8c93916e76b50288e67b9"
>             },
>             "quantity": 2,
>             "request": {
>                 "type": "GET",
>                 "url": "http://localhost:3000/orders/5ba8cb0016e76b50288e67ba"
>             }
>         },
>         {
>             "_id": "5baa1c5c121b9350d309ce6a",
>             "product": {
>                 "_id": "5baa1a96d6fc025019a15287",
>                 "productImage": "uploads/2018-09-25T11:23:02.744ZScreenshot from 2018-08-07
> 11-27-31.png"
>             },
>             "quantity": 1,
>             "request": {
>                 "type": "GET",
>                 "url": "http://localhost:3000/orders/5baa1c5c121b9350d309ce6a"
>             }
>         }
>     ]
1
Bhakti Thakkar 26 Сен 2018 в 07:37

2 ответа

Лучший ответ

Согласно документации Mongoose, если вы вызываете populate () несколько раз с одним и тем же путем, то только последний из них вступит в силу.

Если вы используете mongoose v3, я считаю, что приведенный ниже код должен работать для вас.

Order.find()
.select("product quantity _id")
.populate('product', 'name price productImage')
.exec()
.then(docs => {
     .....
     .....
})

Ссылка на документацию Mongoose. https://mongoosejs.com/docs/populate.html

1
Sreehari 26 Сен 2018 в 05:08

Я предполагаю

  Order.find()
    .select("product quantity _id")
    .populate('product', 'name')
    .populate('product', 'price')
    .populate('product','productImage')
    .exec()

Не работает, потому что вы снова и снова заполняете одно конкретное поле для одного и того же refrence.

Что происходит?

  1. продукт заполняется полем имени.
  2. вы снова заполняете товар полем цены и перезаписываете предыдущий документ.
  3. вы снова заполняете поле productImage и перезаписываете предыдущий документ.

Что вам нужно сделать?

  Order.find()
    .select("product quantity _id")
    .populate('product', 'name price producImage')

Вызовите одно заполнение с помощью синтаксиса имени поля, а также посмотрите выбор поля.

0
vibhor1997a 26 Сен 2018 в 05:10