关系猫鼬

时间:2019-04-11 19:26:42

标签: javascript node.js mongodb mongoose

我有两个架构,其中一个要依赖另一个来保存。

const OrderSchema = new moongose.Schema({
    product: {
        type: moongose.Schema.Types.ObjectId,
        ref: 'Product',
        required: true
    },
    quantity: {
        type: Number,
        required: true,
        default: 1,
    },
    total_price: {
        type: Number,
    }
})

OrderSchema.pre('save', async function(next) {
    this.total_price = product.price * quantity

    next()
})

const Order = moongose.model('Order', OrderSchema)

另一个:

const ProductSchema = new moongose.Schema({
    name: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    },
    description: {
        type: String
    },
    photo: {
        data: Buffer,
        contentType: String
    }
})

const Product = moongose.model('Product', ProductSchema)

但是当我尝试保存一个订单,而一个产品正在数据库中退出时

{
    "product":"5cae6ff5d478882ed8725911",
    "quantity":3
}

显示错误:错误:ReferenceError:产品未定义

这是我保存新订单的控制器:

router.post('/register', async (req, res) => {
    try {
        const order = await Order.create(req.body)

        return res.send({ order })
    }
    catch (error) {
        console.error('Error:', error)
    }
})

2 个答案:

答案 0 :(得分:0)

我通常使用

    idproduct: {
         type: moongose.Schema.ObjectId,
         required: true
     },

通过这种方式帖子可以正常工作

答案 1 :(得分:0)

大声笑,我发现了错误:

OrderSchema.pre('save', async function(next) {
    this.total_price = product.price * quantity

    next()
})

我忘了使用“ THIS”,正确:

OrderSchema.pre('save', async function(next) {
    this.total_price = this.product.price * this.quantity

    next()
})

嘿嘿,对不起...