【问题标题】:Aggregate the arrays in MongoDB (2)聚合MongoDB中的数组(2)
【发布时间】:2018-08-02 13:00:16
【问题描述】:

我的数据库结构如下:

 {
                "teams" : [
                    {
                        "best_players" : [
                            {
                                "contact" : {
                                    "name" : "SomeName1"
                                }, 
                                "characteristic" : {
                                    "skills" : "good"
                                 }
                                },
                                {
                                "contact" : {
                                    "name" : "SomeName2"
                                }, 
                                "characteristic" : {
                                    "skills" : "good"
                                 }
                                }

                        ], 
                        "teamname" : "SomeTeam1"
                    }, 
                    {
                    "best_players" : [
                        {
                            "contact" : {
                                "name" : "SomeName3"
                            }, 
                            "characteristic" : {
                                "skills" : "bad"
                             }
                            }
                    ], 
                    "teamname" : "SomeTeam2"
                } 
                    ]
              }

我需要重命名数组和字段,并以不同的形式查看信息。我对聚合框架的期望:

    {
    "team_players" : [
    {
    "player_name" : "SomeName1",
    "player_skills" : "good" ,
    "team_name" : "SomeTeam1"
    },
    {
    "player_name" : "SomeName2",
    "player_skills" : "good" ,
    "team_name" : "SomeTeam1"
    },
    {
    "player_name" : "SomeName3",
    "player_skills" : "bad" ,
    "team_name" : "SomeTeam2"
    }
    ]
    }

使用聚合框架查询我的结果的正确方法是什么?

【问题讨论】:

    标签: mongodb nosql mongodb-query aggregation-framework


    【解决方案1】:

    一切正常

         db.are.aggregate([
        { "$unwind": "$teams" },
        { "$unwind": "$teams.best_players" },
        {
            "$group": {
                "_id": null, "team_players": {
                    "$push":
                    {
                        "player_name": "$teams.best_players.contact.name",
                        "player_skills": "$teams.best_players.characteristic.skills",
                        "team_name": "$teams.teamname"
                    }
                }
            }
        }
    ])
    

    【讨论】:

      【解决方案2】:

      您可以使用$reduce$concatArrays 来转换所有best_players。

      类似

      db.colname.aggregate(
      {"$project":{
        "team_players":{
          "$reduce":{
            "input":"$teams",
            "initialValue":[],
            "in":{"$concatArrays":[
              "$$value",
               {"$map":{
                  "input":"$$this.best_players",
                  "as":"bp",
                  "in":{
                    "player_name":"$$bp.contact.name",                             
                    "player_skills":"$$bp.characteristic.skills",
                    "team_name":"$$this.teamname"
                 }
              }}
            ]}
          }
        }
      }});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2019-09-28
        • 2021-04-28
        • 2014-12-01
        • 2021-11-20
        • 2015-12-06
        • 1970-01-01
        相关资源
        最近更新 更多