Ich denke db.grades.find, sort, limit ist extrem einfach. Ich mag das. Wenn es notwendig ist, eine Aggregationspipeline zu verwenden, um fortgeschrittenere Arbeit zu leisten, dann denken Sie einfach an Aggregation als eine Reihe von Schritten. Es ist nicht wie SQL (wo Sie alles in eine einzige Anweisung stopfen).
Verwenden Sie stattdessen die Aggregationspipeline, um Ihre Abfrage in Schichten aufzubauen. Führen Sie die folgenden durch Hinzufügen von jeweils einem Element und Sie werden sehen, was ich meine.
db.grades.aggregate(
{'$match':{'score':{'$gte':65}}},
{'$group':{'_id':'$student_id', 'scoreMax':{'$max':'$score'}}},
{'$sort':{'scoreMax':-1}},
{'$limit':1}
)
$ Spiel zieht Partituren> = 65 Führen Sie Ihre Pipeline nur mit diesem Element, und Sie werden alle passenden Noten sehen.
db.grades.aggregate(
{'$match':{'score':{'$gte':65}}}
)
$ group max Punktzahl pro STUDENT_ID bekommt (also nehme ich an, ist das, was Ihr Professor will mit dem Sie arbeiten)
db.grades.aggregate(
{'$match':{'score':{'$gte':65}}},
{'$group':{'_id':'$student_id', 'scoreMax':{'$max':'$score'}}}
)
$ sort legt, dass aggregierte Schüler Liste in bestellen
db.grades.aggregate(
{'$match':{'score':{'$gte':65}}},
{'$group':{'_id':'$student_id', 'scoreMax':{'$max':'$score'}}},
{'$sort':{'scoreMax':-1}}
)
$ limit (klügstenes dümmsten) zieht nur den besten Schüler und ihre Punktzahl.
db.grades.aggregate(
{'$match':{'score':{'$gte':65}}},
{'$group':{'_id':'$student_id', 'scoreMax':{'$max':'$score'}}},
{'$sort':{'scoreMax':-1}},
{'$limit':1}
)
Gut erklärt! Danke euch allen! :) – Imdad