【问题标题】:How to execute multiple populate in Express js?如何在 Express js 中执行多个填充?
【发布时间】:2018-09-26 13:10:49
【问题描述】:

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

这是我的代码,

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

【问题讨论】:

  • 这是什么填充?它返回了什么?
  • 请查看我更新的问题@Sreehari
  • 您需要对您的 mongoose 架构提供一些见解,否则每个人都只是在猜测。

标签: node.js express mongoose populate


【解决方案1】:

根据 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

【讨论】:

    【解决方案2】:

    我想

      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 调用单个填充,还可以查看field selection

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多