我是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的一个元素。
此致
答案 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
值得一提的是,第二个查询可能会更慢,因为有两个查询已执行。