Как выполнить множественное заполнение в Express JS? - PullRequest
0 голосов
/ 26 сентября 2018

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

вот мой код,

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.Если я удаляю 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"
>             }
>         }
>     ]

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Полагаю,

  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 голосов
/ 26 сентября 2018

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

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

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

Справочная документация мангуста.https://mongoosejs.com/docs/populate.html

...