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

213 lines
5 KiB
JavaScript

print("Spieler mit Details ihrer Achievements:");
db.spieler
.aggregate([
{
$lookup: {
from: "achievements",
let: { spielerId: "$_id" },
pipeline: [
{
$match: {
$expr: {
$in: ["$$spielerId", "$errungen_von.spieler_id"],
},
},
},
],
as: "erreichte_achievements",
},
},
{
$project: {
username: 1,
gesamtpunktzahl: 1,
achievements: {
$map: {
input: "$erreichte_achievements",
as: "achievement",
in: {
name: "$$achievement.name",
punktewert: "$$achievement.punktewert",
schwierigkeit: "$$achievement.schwierigkeit",
},
},
},
},
},
])
.forEach(printjson);
print("\nDetailierte Spieleranalyse mit Spiel- und Achievement-Informationen:");
db.spieler
.aggregate([
{ $unwind: "$spielstatistiken" },
{
$lookup: {
from: "spiele",
localField: "spielstatistiken.spiel_id",
foreignField: "_id",
as: "spiel_details",
},
},
{
$lookup: {
from: "achievements",
let: { spielerId: "$_id" },
pipeline: [
{
$match: {
$expr: {
$in: ["$$spielerId", "$errungen_von.spieler_id"],
},
},
},
],
as: "achievements",
},
},
{
$project: {
_id: 0,
spieler: "$username",
spiel: { $arrayElemAt: ["$spiel_details.spielname", 0] },
genre: { $arrayElemAt: ["$spiel_details.genre", 0] },
leistung: {
siege: "$spielstatistiken.siege",
niederlagen: "$spielstatistiken.niederlagen",
k_d_ratio: "$spielstatistiken.k_d_ratio",
spielzeit: "$spielstatistiken.spielzeit_minuten",
},
achievements: {
anzahl: { $size: "$achievements" },
gesamtpunkte: { $sum: "$achievements.punktewert" },
liste: "$achievements.name",
},
},
},
{
$match: {
"leistung.k_d_ratio": { $gt: 1.5 },
},
},
{
$sort: {
"leistung.k_d_ratio": -1,
},
},
])
.forEach(printjson);
print("\nSpiel-Achievement-Analyse:");
db.spiele
.aggregate([
{
$lookup: {
from: "achievements",
let: { spielId: "$_id" },
pipeline: [
{
$match: {
$expr: {
$gt: [{ $size: "$errungen_von" }, 1],
},
},
},
],
as: "spiel_achievements",
},
},
{
$lookup: {
from: "spieler",
let: { spielId: "$_id" },
pipeline: [
{ $unwind: "$spielstatistiken" },
{
$match: {
$expr: {
$eq: ["$spielstatistiken.spiel_id", "$$spielId"],
},
},
},
],
as: "spieler_stats",
},
},
{
$project: {
spielname: 1,
genre: 1,
schwierigkeitsgrad: 1,
statistiken: {
aktive_spieler: { $size: "$spieler_stats" },
durchschnitt_kd: {
$avg: "$spieler_stats.spielstatistiken.k_d_ratio",
},
gesamt_spielzeit: {
$sum: "$spieler_stats.spielstatistiken.spielzeit_minuten",
},
achievements: {
anzahl: { $size: "$spiel_achievements" },
schwierigkeitsverteilung: {
$reduce: {
input: "$spiel_achievements",
initialValue: { einfach: 0, mittel: 0, schwer: 0 },
in: {
einfach: {
$add: [
"$$value.einfach",
{
$cond: [
{ $eq: ["$$this.schwierigkeit", "Niedrig"] },
1,
0,
],
},
],
},
mittel: {
$add: [
"$$value.mittel",
{
$cond: [
{ $eq: ["$$this.schwierigkeit", "Mittel"] },
1,
0,
],
},
],
},
schwer: {
$add: [
"$$value.schwer",
{
$cond: [
{ $eq: ["$$this.schwierigkeit", "Sehr Hoch"] },
1,
0,
],
},
],
},
},
},
},
},
},
},
},
{
$sort: {
"statistiken.aktive_spieler": -1,
},
},
])
.forEach(printjson);