如何在猫鼬中填充模型
Posted
技术标签:
【中文标题】如何在猫鼬中填充模型【英文标题】:How to populate model in mongoose 【发布时间】:2021-06-29 00:49:16 【问题描述】:当我向我的订单发送 GET 请求时,响应在我的 orderItems 中返回我的 OjectID。在我的情况下,如何填充模型以获取 orderItems 名称?与产品型号相关的我的订单项目。需要返回产品名称。我是 mongo db 的新人。不太了解 Mongo 中的填充方法
邮递员结果
[
"orderItems": [
"60668d8514508746c5480ede"
],
"status": "3",
"_id": "60668d8514508746c5480edf",
"shippingAddress1": "Lo",
"shippingAddress2": "2/1",
"city": "5",
"zip": "5",
"phone": "5633",
"totalPrice": 700,
"user":
"_id": "60644f8d87463d10b8c7bb27",
"name": "Lopez",
"id": "60644f8d87463d10b8c7bb27"
,
"dateOrdered": "2021-04-02T03:20:37.884Z",
"__v": 0,
"id": "60668d8514508746c5480edf"
]
我的获取请求
router.get(`/`, async (req, res) =>
const orderList = await Order.find().populate('user', 'name').sort('dateOrdered': -1);
if(!orderList)
res.status(500).json(success: false)
res.send(orderList);
)
型号
// Order Model
const orderSchema = mongoose.Schema(
orderItems: [
type: mongoose.Schema.Types.ObjectId,
ref: 'OrderItem',
required:true
],
orderSchema.virtual('id').get(function ()
return this._id.toHexString();
);
orderSchema.set('toJSON',
virtuals: true,
);
exports.Order = mongoose.model('Order', orderSchema);
//Order Items Model
onst orderItemSchema = mongoose.Schema(
quantity:
type: Number,
required: true
,
product:
type: mongoose.Schema.Types.ObjectId,
ref: 'Product'
)
exports.OrderItem = mongoose.model('OrderItem', orderItemSchema);
【问题讨论】:
我尝试了你的代码,没有任何改变,返回了对象 ID。产品未填充 试试Order.find().populate('user', 'name').populate('orderItems')
。
你得到 orderItems 填充了吗?
【参考方案1】:
订单 -> orderItems -> 产品
选项-1
Order.find().populate('user', 'name').populate( path : 'orderItems', populate : path : 'product' )
https://github.com/Automattic/mongoose/issues/1377
选项-2
https://mongoosejs.com/docs/populate.html
https://mongoosejs.com/docs/populate.html#populate-middleware
添加这个:-
const populateProduct = function(next)
this.populate('product');
next();
;
orderItemSchema.pre('findOne', populateProduct).pre('find', populateProduct);
更改查询如下:-
Order.find().populate('user', 'name').populate('orderItems')
https://www.npmjs.com/package/mongoose-autopopulate
【讨论】:
Gupta,谢谢,但在订单列表视图中不起作用。 mongoose-autopopulate,认为在我的情况下它可能是一个很好的解决方案。谢谢以上是关于如何在猫鼬中填充模型的主要内容,如果未能解决你的问题,请参考以下文章