print("Spielstatistiken aller Spieler:"); db.spieler .find({}, { _id: 0, username: 1, spielstatistiken: 1 }) .forEach(printjson); print("\nSpieler mit K/D-Ratio über 1.8 in irgendeinem Spiel:"); db.spieler .find( { "spielstatistiken.k_d_ratio": { $gt: 1.8 }, }, { username: 1, spielstatistiken: { $filter: { input: "$spielstatistiken", as: "stat", cond: { $gt: ["$$stat.k_d_ratio", 1.8] }, }, }, } ) .forEach(printjson); print("\nVerflachte Spielerstatistiken:"); db.spieler .aggregate([ { $unwind: "$spielstatistiken" }, { $match: { "spielstatistiken.spielzeit_minuten": { $gt: 1000 }, }, }, { $project: { _id: 0, spieler: "$username", spiel_id: "$spielstatistiken.spiel_id", statistiken: { siege: "$spielstatistiken.siege", niederlagen: "$spielstatistiken.niederlagen", k_d_ratio: "$spielstatistiken.k_d_ratio", spielzeit: "$spielstatistiken.spielzeit_minuten", letztes_spiel: "$spielstatistiken.letztes_spiel", }, }, }, { $sort: { "statistiken.k_d_ratio": -1, }, }, ]) .forEach(printjson); print("\nDurchschnittliche Statistiken pro Spiel:"); db.spieler .aggregate([ { $unwind: "$spielstatistiken" }, { $group: { _id: "$spielstatistiken.spiel_id", anzahl_spieler: { $sum: 1 }, durchschnitt_kd: { $avg: "$spielstatistiken.k_d_ratio" }, gesamt_spielzeit: { $sum: "$spielstatistiken.spielzeit_minuten" }, gesamt_siege: { $sum: "$spielstatistiken.siege" }, gesamt_niederlagen: { $sum: "$spielstatistiken.niederlagen" }, }, }, { $lookup: { from: "spiele", localField: "_id", foreignField: "_id", as: "spiel_info", }, }, { $project: { _id: 0, spiel: { $arrayElemAt: ["$spiel_info.spielname", 0] }, statistiken: { spieler: "$anzahl_spieler", avg_kd: { $round: ["$durchschnitt_kd", 2] }, spielzeit_stunden: { $round: [{ $divide: ["$gesamt_spielzeit", 60] }, 1], }, siege: "$gesamt_siege", niederlagen: "$gesamt_niederlagen", }, }, }, { $sort: { "statistiken.spieler": -1, }, }, ]) .forEach(printjson);