聚合mongodb结果agroup

时间:2017-07-02 03:26:10

标签: mongodb aggregation-framework nosql

有人和我在一起我很轻松,我不受欢迎。

我不知道是否需要与小组进行此调整

db.users.aggregate([
        { $match : {  '_id': ObjectId('5956a6361b9f673dc629c9a6') } },
        { '$unwind': { 'path': '$profile', 'preserveNullAndEmptyArrays': true } },
        {$lookup: {
                'from': 'institution',
                'localField': 'profile.departament',
                'foreignField': 'departament._id',
                'as': 'Institution'
            }   
        },
        { '$unwind': { 'path': '$Institution', 'preserveNullAndEmptyArrays': true } },

        {$project: {
          'Profile':{
                'name' : '$name',
                'photo': '$photo',
                'nickname' : '$nickname',
                'institution' : {name: '$Institution.name', photo: '$Institution.photo'},        
                'departments' : {title : '$Institution.departament.title', category: '$Institution.departament.category'} ,
             }
           }
        },

        { $group : {
              '_id' : '$_id', 
              'profile': { $push : '$Profile' },

            }
        },




    ])

我不能做小组'机构'o结果就像这样

"departments" : {
            "title" : [
                "Terror by africa", 
                "Africa"
            ], 
            "category" : [
                "Sub-15", 
                "Sub-20"
            ]
        }

因为我试图不必使用数组位置

"departments" : {
            "title" : [{
                name: "Terror by africa", 
                category: "Sub-15", 
            },{
                name: "Africa", 
                category: "Sub-20", 
            }], 

        }

1 个答案:

答案 0 :(得分:1)

您可以删除$group阶段并更新departments投影,以使用$map转换密钥。

这样的东西
{
    departments: {
        $map: {
            input: "$Institution.departament",
            as: "departament",
            in: {
                name: '$$departament.title',
                category: '$$departament.category'
            }
        }
    }
 }