MongoDB将对象与对象数组聚合在一起?

Mic*_*ael 0 mongodb aggregation-framework

这是我收藏中的一部分json

[{"company":"Lenovo", "models": 
    [{"model":"ThinkPad T400", "gens": 
        [{"gen":"3", "start":2012},
        {"gen":"2", "start":2008},
        {"gen":"1", "start":2004}]
    }...]
}...]
Run Code Online (Sandbox Code Playgroud)

我试图提出一个聚合命令,该命令将返回以下内容:

[{ "_id":"Lenovo", 
  "models":[{ "model": "ThinkPad T400", 
              "gens":["1","2","3"]
            }...]
}...]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下聚合命令,但是没有用:

db.makes.aggregate([{
    $group:{
        _id: '$company',
        models: { $push:  { 
            model: "$models.model", 
            gen: "$models.gens.gen"
        }} 
    } 
}])
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

[{ "_id":"Lenovo", 
  "models":[{ "model": ["ThinkPad T400"], 
              "gens":[ ["1","2","3"] ]
            }...]
}...]
Run Code Online (Sandbox Code Playgroud)

可能是因为每个我的对象都有一个对象数组(模型),而这些对象也有一个对象数组(Gens)。

对MongoDB的正确要求是什么,它将使我得到预期的结果?

Dis*_*ser 5

试试这个查询:

db.makes.aggregate([
{$unwind : '$models'},
{
    $group:{
        _id: '$company',
        models: { $push:  { 
            model: "$models.model", 
            gen: "$models.gens.gen"
        }} 
    }
}])
Run Code Online (Sandbox Code Playgroud)

输出将是

{
    "_id" : "Lenovo",
    "models" : [ 
        {
            "model" : "ThinkPad T400",
            "gen" : [ 
                "3", 
                "2", 
                "1"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)