213 lines
5 KiB
JavaScript
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);
|