m165/KN04/unter_dokumente.js
2025-02-19 19:54:56 +01:00

106 lines
2.4 KiB
JavaScript

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);