MongoDB - 将集合转换为数组字段

时间:2016-12-09 11:34:36

标签: mongodb aggregation-framework

我是mongodb的新手。我有两个系列," season_16_17"和#34;团队"。 "队"集合是在season_16_17之前创建的。现在我需要将此团队集合复制为season_16_17的数组字段。

团队:

{
        "_id" : ObjectId("zzzzzzzz"),
        "club" : "Real Madrid",
        "name" : "Real Madrid A"        
}
{
        "_id" : ObjectId("xxxxxxx"),
        "club" : "At Madrid",
        "name" : "At Madrid A"
}

现在我需要season_16_17作为:

{"_id" : ObjectId("xxxxxxx"),
        "teams":[
{
        "_id" : ObjectId("zzzzzzzz"),
        "club" : "Real Madrid",
        "name" : "Real Madrid A"        
}
{
        "_id" : ObjectId("xxxxxxx"),
        "club" : "R.S.D. ALCALA S.A.D.",
        "name" : "At Madrid A"
}]}

我试过了:

db.teams.aggregate([{"$project":{"teams":"$$ROOT"}},{"$out":"season_16_17"}])

但结果并不是我的预期。这将每个团队复制为season_16_17的一个元素。

此致

1 个答案:

答案 0 :(得分:0)

您需要使用$push阶段$group数组中的值,您可以使用相同的值对所有元素进行分组,此处使用新的ObjectId,而不是{{1}到一个新的集合:

$out

结果:

db.teams.aggregate([
    {$group: {_id: ObjectId(), teams: {$push: "$$ROOT"} }},
    {"$out":"season_16_17"}
]
)

编辑:

db.season_16_17.find() { "_id" : ObjectId("584a9f48dbaccc34c65b3055"), "teams" : [ { "_id" : ObjectId("584a9f47dbaccc34c65b3053"), "club" : "Real Madrid", "name" : "Real Madrid A" }, { "_id" : ObjectId("584a9f47dbaccc34c65b3054"), "club" : "At Madrid", "name" : "At Madrid A" } ] } 将创建一个新集合。

根据您的建议,其他解决方案是:

$out

值得一提的是,第二个查询可能会更慢,因为有两个查询已执行。