如何填充嵌套数组引用?猫鼬

时间:2018-09-20 00:51:10

标签: javascript mongodb mongoose mongoose-schema mongoose-populate

我发现这篇帖子与我的需求非常接近,但是尽管如此,我仍然无法使其正常工作

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.productpath: products.product._id

但是我能得到的只是_id,它并不能填满整个内容。

有人可以帮我一下或提供建议吗?

预先感谢

编辑:这是用于orderSchema的文档在db中的样子

{
    "_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
}

2 个答案:

答案 0 :(得分:0)

您应该可以这样做:

const order = await Orders.findOne({
    _id: 'orderId39843984203'
}).populate('products.product')
.exec((error, doc) => doc);

按照docs for populate

答案 1 :(得分:0)

.populate({ path: 'nested', populate: { path: 'deepNested' }});

其中nested是一级参考,而deepnested是一级参考。