如何在 Express js 中执行多个填充?

How to execute multiple populate in Express js?

我正在尝试执行多个填充,到目前为止,只有最后一个填充在执行。

这是我的代码,

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"
>             }
>         }
>     ]

根据 Mongoose 文档,如果您使用同一路径多次调用 populate() ,则只有最后一次生效。

如果您使用的是 mongoose v3,我相信下面的代码应该适合您。

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

猫鼬文档参考。 https://mongoosejs.com/docs/populate.html

我想

  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')

调用单个填充 field name syntax and also see field selection