代码之家  ›  专栏  ›  技术社区  ›  Janina Nuber

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

  •  0
  • Janina Nuber  · 技术社区  · 8 年前

    我是MongoDB&Pymango的新手-据我所知,我需要使用类似这样的聚合(示例取自教程):

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

    [“回复选项3”,“回复选项2”]

    我很感激任何帮助。

    1 回复  |  直到 8 年前
        1
  •  0
  •   matthPen    8 年前

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

    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\u keyword2\u keyword3,只需复制和更新facetpline,并将新字段添加到结果中。

    希望有帮助。

    推荐文章