繁体   English   中英

将数组字段组合成单个数组字段mongo

[英]combine array fields into a single array field mongo

我使用的是mongo 3.4.3版,我的文档以这种方式存储在mongo中-

{
    "_id" : ObjectId("5ad5ab8aaf2808b739ba6ab2"),
    "ResumeId" : "105839064",
    "ResumeDetails" : {

            "WorkProfile" : [
                    {
                            "Company" : "XXXXXXXXX",
                            "JobTitle" : "YYYYY",
                            "JobSkills" : {
                                "CommonSkills": [],
                                "OtherSkills": []
                            }
                    },
                    {
                            "Company" : "XXXXXXXX",
                            "JobTitle" : "YYYYYY",
                            "JobSkills" : {
                                    "CommonSkills" : [
                                            ObjectId("5ad5ab860b94c96c738e914a")
                                    ],
                                    "OtherSkills" : [
                                            ObjectId("5ad5ab860b94c96c738e9146")
                                    ]
                            }
                    },
                    {
                            "Company" : "XXXXXXX",
                            "JobTitle" : "YYYY"
                    }
            ],
            "AdditionalSkills" : {
                    "CommonSkills" : [
                            ObjectId("5ad5ab860b94c96c738e9175"),
                            ObjectId("5ad5ab860b94c96c738e91f0"),
                            ObjectId("5ad5ab860b94c96c738e9241"),
                            ObjectId("5ad5ab860b94c96c738e919b")
                    ],
                    "OtherSkills" : [
                            ObjectId("5ad5ab860b94c96c738e90e6"),
                            ObjectId("5ad5ab860b94c96c738e9142"),
                            ObjectId("5ad5ab860b94c96c738e9211"),
                            ObjectId("5ad5ab860b94c96c738e9293"),
                            ObjectId("5ad5ab860b94c96c738e92c8")
                    ]
            }
    },
    "DocId" : "51cb2f49-fcb9-46a0-9040-67e0f986be11"

}

我想将WorkProfile下的所有技能和2个单独数组下的AdditionalSkills结合起来。 我尝试了以下查询

db.ResumeParsedData.aggregate([
{$match: {'DocId': '51cb2f49-fcb9-46a0-9040-67e0f986be11'}},
{$project: {
        'JobSkills': {'$concatArrays': [
            '$ResumeDetails.WorkProfile.JobSkills.CommonSkills', '$ResumeDetails.WorkProfile.JobSkills.OtherSkills']
        },
        'AdditionalSkills': {'$setUnion': [
            '$ResumeDetails.AdditionalSkills.CommonSkills', '$ResumeDetails.AdditionalSkills.OtherSkills']},
    }
}]).pretty()

但是我得到以下输出-

{
    "_id" : ObjectId("5ad5ab8aaf2808b739ba6ab2"),
    "JobSkills" : [
            [
                    ObjectId("5ad5ab860b94c96c738e914a")
            ],
            [
                    ObjectId("5ad5ab860b94c96c738e9146")
            ]
    ],
    "AdditionalSkills" : [
            ObjectId("5ad5ab860b94c96c738e90e6"),
            ObjectId("5ad5ab860b94c96c738e9142"),
            ObjectId("5ad5ab860b94c96c738e9175"),
            ObjectId("5ad5ab860b94c96c738e919b"),
            ObjectId("5ad5ab860b94c96c738e91f0"),
            ObjectId("5ad5ab860b94c96c738e9211"),
            ObjectId("5ad5ab860b94c96c738e9241"),
            ObjectId("5ad5ab860b94c96c738e9293"),
            ObjectId("5ad5ab860b94c96c738e92c8")
    ]

}

如何修复JobSkills数组字段。 当前它以数组字段的形式出现。

我还尝试了两次concatArrays ,如下所示:

db.ResumeParsedData.aggregate([ 
    {$match: {'DocId': '51cb2f49-fcb9-46a0-9040-67e0f986be11'}}, 
    {$project: { 
        'JobSkills': {'$concatArrays': { '$concatArrays': [ 
            '$ResumeDetails.WorkProfile.JobSkills.CommonSkills', 
            '$ResumeDetails.WorkProfile.JobSkills.OtherSkills'
        ]}}, 
        'AdditionalSkills': {'$setUnion': [ 
            '$ResumeDetails.AdditionalSkills.CommonSkills', 
            '$ResumeDetails.AdditionalSkills.OtherSkills'
        ]}, 
    } }
]).pretty()

您可以使用$ reduce (在3.4中可用)来展平您的数组:

db.ResumeParsedData.aggregate([
    { $match: {"DocId": "51cb2f49-fcb9-46a0-9040-67e0f986be11"} },
    {
        $project: {
            "JobSkills": {
                $reduce: {
                    input: {
                            $concatArrays: ["$ResumeDetails.WorkProfile.JobSkills.CommonSkills", "$ResumeDetails.WorkProfile.JobSkills.OtherSkills"]
                        },
                    initialValue: [],
                    in: { $setUnion: [ "$$this", "$$value" ] }
                }
            },
            "AdditionalSkills": {"$setUnion": [
                "$ResumeDetails.AdditionalSkills.CommonSkills", "$ResumeDetails.AdditionalSkills.OtherSkills"]}
        }
    }
])

$ setUnion保证最终数组中没有重复项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM