【问题标题】:Mongoose - Populating a nested array of objects not workingMongoose - 填充嵌套的对象数组不起作用
【发布时间】:2021-11-05 17:25:01
【问题描述】:

我有一个名为 Orders 的集合,其中包含此架构:

const mongoose = require('mongoose');

const orderSchema = new mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User',
        required: true
    },
    restaurant: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Restaurant',
        required: true
    },
    dishes: [
        {
            dish: {
                type: mongoose.Schema.Types.ObjectId,
                ref: 'Dish'
            },
            amount: Number
        }
    ],
    price: {
        type: Number,
        required: true
    },
    comment: {
        type: String,
        required: false
    },
    status: {
        type: String,
        enum: ['PROCESSING', 'CANCELLED', 'COMPLETED', 'ERROR'],
        default: 'PROCESSING'
    },
    timestamp: {
        type: Date,
        default: Date.now
    }
})

module.exports = mongoose.model('Order', orderSchema);

在我的路由器里面,我有这个代码:

let orders = await Order.find({restaurant: restaurantID, status:'PROCESSING'}).populate('dishes._id').exec()

Order.find 不会抛出异常,但它也不起作用。 我希望 res.body 看起来像这样:

            {
                "_id": "objectID",
                "user": "objectID",
                "restaurant": "objectID",
                "dishes": [
                    {
                        "amount": number,
                        "dish": {
                            //dish object
                        }
                    },
                    ...
                ],
                //other order properties
            },
            ...
        ]

但由于某种原因,dishes 数组看起来像这样:

        "dishes": [
            {
                "amount": 1,
                "_id": "6184e848e6d1974a0569783d"
            }
        ],

我做错了什么?

我知道如果 populate() 工作 res.body dishes 数组不会有一个名为“dish”的属性,而是有一个名为 _id 的属性,它将包含盘对象,但这应该不难更改一次populate() 即可。

编辑:

我意识到我的 createOrder 路由可能是问题的一部分,因为它忽略了我的架构并为 objectID 使用id 属性而不是dish。我保存到数据库的数组包含一个名为id 的属性,而不是dish,但是当我尝试将这样的内容保存到我的数据库时,我的架构不应该抛出异常吗?

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    乍一看,我认为问题可能是您有语法问题。 试试

    .populate('dishes').exec()
    

    而不是

    .populate('dishes._id').exec()
    

    【讨论】:

    • 会不会也覆盖我的amount 属性,并且只将菜对象保存在数组中?
    • 别这么认为,试试吧
    • 不起作用,res.body 看起来还是一样
    猜你喜欢
    • 2019-09-23
    • 2021-12-18
    • 2017-10-03
    • 2017-01-01
    • 2020-06-07
    • 2015-03-26
    • 2018-06-07
    • 2019-12-06
    相关资源
    最近更新 更多