Mongodb 3.2:在$ lookup之前与$ project进行mongodb聚合

时间:2019-02-22 09:07:54

标签: mongodb

我有一个问题,实际上我正在尝试加入不同的集合进行某些操作,但是由于“ BatchInfo”和“ UserInfo”都为空,因此我无法获得结果。

首先执行“项目”的原因是因为我想从相应的对象中取出“批处理ID”和“用户ID”,然后在相应的“查找”“ foreignField”中应用。另外,我正在使用mongo 3.2。

db.getCollection('coursecompletedfeedbacks').aggregate([

    {

        $project: {

           "BATCH" : 1,

           "FEEDBACK" : 1,

           "USER" : 1,

           "batchId" : "$BATCH._id",

           "userId" : "$USER._id"

        }

    },

    {

        $lookup:{

            from: "batches",           

            localField: "batchId",         

            foreignField: "_id",   

            as: "BatchInfo"           

        }

    },

    {

        $lookup:{

            from: "users",           

            localField: "userId",         

            foreignField: "_id",   

            as: "UserInfo"           

        }

    }

])

1 个答案:

答案 0 :(得分:0)

请尝试以下操作:

db.getCollection('coursecompletedfeedbacks').aggregate([
    {
        $lookup:{
            from: "batches",           
            let: { bId: "$BATCH._id" },          
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $eq: ["$_id", "$$bId"]
                        }
                    }
                },
            ],
            as: "BatchInfo"           
        }
    },
    {
        $lookup:{
            from: "users",           
            let: { uId: "$USER._id" },      
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $eq: ["$_id", "$$uId"]
                        }
                    }
                },
            ],   
            as: "UserInfo"           
        }
    },
    {
        $project: {
           "BatchInfo" : 1,
           "UserInfo" : 1,
           ""FEEDBACK" : 1,
        }
    },
])