【问题标题】:Mongodb 3.2 : mongodb aggregation with $project before $lookupMongodb 3.2:在 $lookup 之前使用 $project 进行 mongodb 聚合
【发布时间】:2019-02-22 09:07:53
【问题描述】:

我有一个问题,实际上我正在尝试为某些操作加入不同的集合,但我无法获得结果,因为“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"           

        }

    }

])

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    尝试如下:

    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,
            }
        },
    ])
    

    【讨论】:

    • 嗨 Jitendra,我试过你的答案,但我收到错误消息:“errmsg”:“$lookup 的参数必须是字符串,让:{ bId: \"$BATCH._id\" } "
    • 抱歉,上述查询仅适用于 MongoDB 3.6,因为这种查找语法是在 3.6 版中引入的。如果您可以升级您的版本,那么请这样做,因为这将有助于进一步查询各种复杂的数据。
    • 这就是问题所在,我也用 v3.4 解决了,但是 v3.2 找不到一个:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2017-02-16
    • 2018-03-27
    • 2022-01-05
    • 2022-07-09
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多