【发布时间】: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