У меня есть документы, хранящиеся в mongodb, например:
{
_id: ObjectId("abc"),
teams: [{
_id: ObjectId("aaa"),
points: 10
}, {
_id: ObjectId("bbb"),
points: 20
}],
players: [{
hints: 2,
team: ObjectId("aaa")
}, {
hints: 3,
team: ObjectId("bbb")
}]
}
Учитывая набор документов, я хочу извлечь командные очки и сумму подсказок их игроков. По сути, я хочу получить что-то вроде:
[{
team: aaa,
points: 10,
hints: 2
}, {
team: bbb,
points: 20,
hints: 3
}]
Где очки - это сумма «очков», полученных командой в каждом документе, а «подсказки» - сумма подсказок, полученных ее игроками. , Я могу добиться этого в двух запросах:
db.data.aggregate([ {$unwind: { "$players" },
{$group: { _id: "$players.team", hints: { $sum: "$player.hints" } } }])
[{ team: aaa, hints: 2 },{ team: bbb, hints: 3 }]
db.data.aggregate([ {$unwind: { "$teams" },
{$group: { _id: "$teams._id", points: { $sum: "$teams.points" } } }])
[{ team: aaa, points: 10 },{ team: bbb, points: 20 }]
Любая идея, чтобы достичь этого только с одним запросом?