我发现这篇文章非常接近我的需要,但不知怎的,我仍然无法让它工作
Populate nested array in mongoose
有点难以解释我在谈论什么样的嵌套引用。我只是从代码开始
我有一个产品架构
const ProductSchema = new Schema(Object.assign({
name: {type: String};
});
订单架构
const OrderSchema = new Schema(Object.assign({
products: [ {
product: { type: Schema.Types.ObjectId, ref: 'Products' },
amount: { type: Number },
total: { type: Number },
} ],
});
我试过了
const order = await Orders.findOne({
_id: 'orderId39843984203'
}).populate({
path: 'products',
populate: {
path: 'product'
}
});
我试过类似的东西,还有很少的其他方法,如path: products.product
或path: products.product._id
和simliar
但我能得到的只是_id
,它不会填满整个事物。
有人可以帮我一把,或者建议一下这个怎么样?
提前致谢
编辑:这就是db for orderSchema中文档的样子
{
"_id": {
"$oid": "5ba2e2af52f2ff3f4226015c"
},
"products": [
{
"_id": {
"$oid": "5ba2e2ac52f22f3f4226015e"
},
"amount": 4,
"total": 2940
},
{
"_id": {
"$oid": "5ba2e2ac52f2ff3f5226015d"
},
"amount": 1,
"total": 840
}
],
"createdAt": {
"$date": "2018-09-19T23:58:36.339Z"
},
"updatedAt": {
"$date": "2018-09-19T23:58:36.505Z"
},
"__v": 0
}
你应该能够这样做:
const order = await Orders.findOne({
_id: 'orderId39843984203'
}).populate('products.product')
.exec((error, doc) => doc);
.populate({ path: 'nested', populate: { path: 'deepNested' }});
其中nested
是第一级参考,deepnested
是参考级别的参考。