fix structure
This commit is contained in:
parent
3cc4ae5699
commit
a7e1a41de4
31 changed files with 102 additions and 13 deletions
115
KN04/aggregation_1.js
Normal file
115
KN04/aggregation_1.js
Normal file
|
@ -0,0 +1,115 @@
|
|||
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);
|
213
KN04/join_aggregation.js
Normal file
213
KN04/join_aggregation.js
Normal file
|
@ -0,0 +1,213 @@
|
|||
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);
|
12
KN04/readme.md
Normal file
12
KN04/readme.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
A) Aggregationen (50%)
|
||||
|
||||
[aggregation_1.js](aggregation_1.js)
|
||||
|
||||
B) Join-Aggregation (30%)
|
||||
|
||||
[join_aggregation.js](join_aggregation.js)
|
||||
|
||||
C) Unter-Dokumente / Arrays (20%)
|
||||
|
||||
[unter_dokumente.js](unter_dokumente.js)
|
||||
|
106
KN04/unter_dokumente.js
Normal file
106
KN04/unter_dokumente.js
Normal file
|
@ -0,0 +1,106 @@
|
|||
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);
|
Loading…
Add table
Add a link
Reference in a new issue