Mongodb $ lookup在数据聚合中-localField属性字符问题

时间:2019-10-29 22:24:04

标签: mongodb

我试图使用聚合的$ lookup连接MongoDB中的多个集合。我现在面临的问题$ lookup localField属性不接受$字符。

我有以下三个收藏集。

学生

{
    "_id" : ObjectId("5db12e6dfc368dff1cfc30e5"),
    "studentId" : "S97YAREA51",
    "name" : "Has Maara duwa",
    "age" : 22
}

课程

{
    "_id" : ObjectId("5db12e6dfc368dff1cfc20e5"),
    "courseId" : "C04865690",
    "courseName" : "Love and Empathy"
}

studentCourse

{
    "_id" : ObjectId("5db12e6dfc368dff1cfc10e5"),
    "student" : {
        "$ref" : "student",
        "$id" : ObjectId("5db12e6dfc368dff1cfc30e5")
    },
    "course" : {
        "$ref" : "course",
        "$id" : ObjectId("5db12e6dfc368dff1cfc20e5")
    }
}

我需要将StudentCourse收藏记录更新为以下内容。

{
    "_id" : ObjectId("5db12e6dfc368dff1cfc10e5"),
    "student" : {
        "$ref" : "student",
        "$id" : ObjectId("5db12e6dfc368dff1cfc30e5")
    },
    "course" : {
        "$ref" : "course",
        "$id" : ObjectId("5db12e6dfc368dff1cfc20e5")
    },
    "studentId" : "S97YAREA51",
    "courseId" : "C04865690"
}

我试图创建以下聚合查询,但是由于localField不接受$字符而失败。如果有人为我提供一个简单的解决方案,我将不胜感激。

db.studentCourse.aggregate([

    {
        $lookup:{
            from: "student",
            localField: "student.$id",
            foreignField: "_id",
            as: "student"
        }
    },

    {   $unwind:"$student" },     // $unwind used for getting data in object or for one record only

    {
        $lookup:{
            from: "course", 
            localField: "course.$id", 
            foreignField: "_id",
            as: "course"
        }
    },

    {   $unwind:"$course" },

    // define which fields are you want to fetch
    {   
        $project:{
            "_id" : 1,
            "student" : 1,
            "course" : 1,
            "studentId" : "$student.studentId",
            "courseId" : "$course.courseId",
        } 
    }
]);

0 个答案:

没有答案