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

115 lines
2.7 KiB
JavaScript

print("Anspruchsvolle Shooter-Spiele (mit separaten $match Stages):");
db.spiele
.aggregate([
{ $match: { genre: "Tactical Shooter" } },
{ $match: { schwierigkeitsgrad: "Hoch" } },
])
.forEach(printjson);
print("\nSpieler Performance Übersicht:");
db.spieler
.aggregate([
{
$match: {
gesamtpunktzahl: { $gt: 1000 },
},
},
{
$project: {
_id: 0,
username: 1,
performance_metrics: {
punktzahl: "$gesamtpunktzahl",
durchschnittliche_kd: {
$avg: "$spielstatistiken.k_d_ratio",
},
gesamt_spielzeit: {
$sum: "$spielstatistiken.spielzeit_minuten",
},
},
},
},
{
$sort: {
"performance_metrics.punktzahl": -1,
},
},
])
.forEach(printjson);
print("\nGesamtstatistiken über alle Spieler:");
db.spieler
.aggregate([
{
$group: {
_id: null,
total_players: { $sum: 1 },
gesamtpunktzahl: { $sum: "$gesamtpunktzahl" },
durchschnittspunktzahl: { $avg: "$gesamtpunktzahl" },
},
},
])
.forEach(printjson);
print("\nAchievement-Statistiken nach Schwierigkeitsgrad:");
db.achievements
.aggregate([
{
$group: {
_id: "$schwierigkeit",
anzahl_achievements: { $sum: 1 },
durchschnittspunkte: { $avg: "$punktewert" },
gesamtpunkte: { $sum: "$punktewert" },
achievements: {
$push: {
name: "$name",
punktewert: "$punktewert",
},
},
},
},
{
$sort: {
durchschnittspunkte: -1,
},
},
])
.forEach(printjson);
print("\nDurchschnittliche Leistung pro Spiel:");
db.spieler
.aggregate([
{ $unwind: "$spielstatistiken" },
{
$group: {
_id: "$spielstatistiken.spiel_id",
anzahl_spieler: { $sum: 1 },
durchschnitt_kd: { $avg: "$spielstatistiken.k_d_ratio" },
gesamt_siege: { $sum: "$spielstatistiken.siege" },
gesamt_niederlagen: { $sum: "$spielstatistiken.niederlagen" },
durchschnitt_spielzeit: { $avg: "$spielstatistiken.spielzeit_minuten" },
},
},
{
$lookup: {
from: "spiele",
localField: "_id",
foreignField: "_id",
as: "spielinfo",
},
},
{
$project: {
_id: 0,
spiel: { $arrayElemAt: ["$spielinfo.spielname", 0] },
statistiken: {
spieler: "$anzahl_spieler",
kd_ratio: { $round: ["$durchschnitt_kd", 2] },
siege: "$gesamt_siege",
niederlagen: "$gesamt_niederlagen",
avg_spielzeit: { $round: ["$durchschnitt_spielzeit", 0] },
},
},
},
])
.forEach(printjson);