NodeJS 如何让mongoDB通过id从数组内部返回项目?[duplicate]

mv1qrgav  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(102)

此问题在此处已有答案

Mongoose populate does not populate array(3个答案)
18小时前关门了。
我试图创建一个订单控制器,在其中通过引用在数组中存储其他“cart”模型,如“list”中所示:

const mongoose = require('mongoose');

const OrderSchema = new mongoose.Schema(
    {
        list: [{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Cart',
        }],
        totalAmount: {
            type: Number,
            required: true,
        },
        payment: {
            type: String,
            required: true,
        },
        address: {
            type: String,
            required: true,
        },
        addressNote: {
            type: String,
            required: false,
        },
        createdAt: {
            type: Date,
            default: Date.now,
        }
    },
    { timestamps: true }
  );
  
module.exports = mongoose.model("Order", OrderSchema);

我可以在列表中存储购物车id,但问题是,当我执行get from order时,我希望列表返回购物车中的内容,而不是我发送的id
显示所有顺序控制器:

const Order = require('../../models/Order');

class ShowAllProduct {
    async show(req, res) {

        try {
            const order = await Order.find({}).populate('list').exec();

            return res.status(200).json(order);
        } catch (err) {
            return res.status(500).json(err);
        }
    }
} 

module.exports = new ShowAllProduct();

我试图通过populate方法来实现这一点,但没有成功。

0yg35tkg

0yg35tkg1#

试 着 用 这种 方法 来 填充

const order = await Order.find({}).populate({
   path:'list',
   model:'Cart'
}).lean();

中 的 每 一 个
更新 : 如果 你 想 从 购物 车 模型 填充 产品 模型 ,

const order = await Order.find({}).populate({
       path:'list',
       model:'Cart',
       populate:{
          path:'product', // field name of product in Cart model
          model:'Product'
       }
    }).lean();

格式
如果 您 只 想 从 模型 中 选择 特定 字段 , 请 在 Populate 中 使用 select:'name image_url'

const order = await Order.find({}).populate({
           path:'list',
           model:'Cart',
           populate:{
              path:'product', // field name of product in Cart model
              model:'Product',
              select:'name image_url'
           }
        }).lean();

格式

相关问题