首页 > 解决方案 > MongoDB 如何正确 $lookup 2 文档?

问题描述

抱歉,我是菜鸟,我正在使用查找两个文档,这里有 3 个表:

const Product = {
 id: ObjectId,
 name: String
}

const user = {
 id: ObjectId,
 name: String
}

const comment = {
 id: ObjectId,
 product: ObjectId('product'),
 user: ObjectId('user'),
 parentComment: ObjectId('comment')
 text: String
}

const rate = {
 id: ObjectId,
 product: ObjectId('product'),
 user: ObjectId('user')
 rate: Number
}

当用户想要查看特定产品时,我向他们显示产品的评论和评分,首先我查询评论而不是查询发布评论的用户以及他们对产品评分的评分值,我实现查找这:

commentModel.aggregate([
                    {
                        $match:{
                            product: mongoose.Types.ObjectId(req.query.productID),
                            parent: null
                        },
                    },
                    {
                        $lookup:
                        {
                            'from': 'users',
                            'localField': 'user',
                            'foreignField': 'id',
                            'as': 'user'
                        }
                    },
                    {
                        $lookup:
                        {
                            'from': 'rates',
                            'pipeline': [
                                { $match: {product: mongoose.Types.ObjectId(req.query.productID), user: 'user.id'}}
                            ],
                            'as': 'rateValue'
                        }
                    }
                ])

查找第一个工作正常,但速率没有,它总是返回空数组,有人可以帮助我,谢谢

标签: mongodbmongodb-query

解决方案


你也可以试试这个

[
    {
        $match:{
            product: mongoose.Types.ObjectId(req.query.productID),
            parent: null
        },
    },
    {
        $lookup: {
            'from': 'users',
            'localField': 'user',
            'foreignField': 'id',
            'as': 'user'
        }
    },
    {
        $lookup: {
            'from': 'rates',
            'localField': 'user',
            'foreignField': 'user',
            'as': 'rateDetail'
        }
    },
    {
        $unwind: '$rateDetail'
    },
    {
        $match: {
            '$rateDetail.product':mongoose.Types.ObjectId(req.query.productID)
        }
    }
]

推荐阅读