MongoDB / pymongo:在嵌套字典中查找最大值

时间:2018-09-03 13:14:02

标签: mongodb pymongo

我想为“输入部分”字段中的每个键打印“输出部分”字段的值,其中“概率”字段具有最大值。

我是MongoDB和pymongo的新手-据我所知,我需要以这种方式使用聚合(示例取自教程):

db.collection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

虽然我不知道如何将其应用于我的示例。

content = [
        {
        "Stage": "Klage",
        "Heading": "Anträge",
        "Input-Section":

                {
                    "keyword1_keyword2_keyword3":
                            [
                                {
                                "Output-Section": "reply_option_1",
                                "Probability": 0.32},
                                {
                                "Output-Section": "reply_option_2",
                                "Probability": 0.1},
                                {
                                "Output-Section": "reply_option_3",
                                "Probability": 0.58}
                            ],

                    "keyword4_keyword5_keyword6":

                            [
                                {
                                "Output-Section": "reply_option_1",
                                "Probability": 0.35},
                                {
                                "Output-Section": "reply_option_2",
                                "Probability": 0.65}
                            ]

                }

        }
]

因此,我希望看到……。喜欢 [“ reply_option_3”,“ reply_option_2”]

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架来实现:

db['02'].aggregate(
    [
        // Stage 1
        {
            $facet: {
        // facet pipeline 1
                  kw123:[
                    {$project: {input:"$Input-Section.keyword1_keyword2_keyword3"}},
                    {$unwind: {path : "$input"}},
                    {$sort: {"input.Probability": -1}},
                    {$limit: 1},
                    {$project: {"Output-Section":"$input.Output-Section",_id:0 }},
                    ],
                    // facet pipeline 2
                    kw456:[
                    {$project: {input:"$Input-Section.keyword4_keyword5_keyword6"}},
                    {$unwind: {path : "$input"}},
                    {$sort: {"input.Probability": -1}},
                    {$limit: 1},
                    {$project: {"Output-Section":"$input.Output-Section",_id:0 }},],
                }
        },
        // Stage 2
        {
            $project: {
                results:{$setUnion:["$kw123.Output-Section","$kw456.Output-Section"]}
            }
        },
    ],
);

结果为:

{ 
    "results" : [
        "reply_option_2", 
        "reply_option_3"
    ]
}

如果您还有其他字段,例如keyword1_keyword2_keyword3,则只需复制和更新构面管道,然后将新字段添加到结果中即可。

希望有帮助。