2016-03-30 7 views
1

Hier ist mein Beispiel MongoDB Sammlung, ich brauche eine Liste aller Datensätze in aufsteigender Reihenfolge der Anzahl der Fächer Schüler eingeschrieben.Sortierung Datensätze nach Größe eines Arrays in MongoDB

wird die entsprechende mysql query

sein me
SELECT name, COUNT(subject_code) AS NUM FROM table_name ORDER BY NUM ASC 

Bitte helfen, eine MongoDB Abfrage zu finden, das gleiche zu tun:

{ 
    ["name"]=> string(5) "David" 
    ["subject_code"]=> array(5) { 
     [0]=> int(101) 
     [1]=> int(111) 
     [2]=> int(121) 
     [3]=> int(123) 
     [4]=> int(53) 
    } 
} 
+0

"* Diese Frage zeigt keine Forschungsbemühungen, ... *" Bitte verbringen Sie 10 Minuten, um darüber zu lesen [aggregation] (https://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/) und Sie können die Frage selbst beantworten: Projektgröße des Arrays und dann das Ergebnis sortieren. –

Antwort

2

ich die bereits Antworten überprüft haben. Das sind nicht wirklich hilfreich. Hoffe, diese Antwort wird hilfreich sein.

Angenommen, Sie die folgenden Dokumente haben

{ "_id" : 1, "name" : "david", subject_code: [ 101, 111, 121 ] } 
{ "_id" : 2, "name" : "joe", subject_code: [ 131 ] } 
{ "_id" : 3, "name" : "sam", subject_code: [ ] } 

Diese Abfrage die Länge der Liste Liste wird als Feld einfach Dinge sind

db.collname.aggregate([{ $project: { name: 1, len: { $size: "$subject_code" }}}]) 

Ausgang LEN

{ "_id" : 1, "name" : "david", len: 3 } 
{ "_id" : 2, "name" : "joe", len: 1 ] } 
{ "_id" : 3, "name" : "sam", len: 0 } 

Jetzt wird. Verwenden Sie eine Sortierfunktion am Ausgang (im Feld "len")

db.collname.aggregate( 
[ 
    {$project: {"name": 1, "nump": { $size: { "$ifNull": ["$subject_code", []] }}}}, 
    {$sort: {nump: -1}} 
]) 

Und das ist Ihre vollständige Abfrage. Es sortiert nach dem Feld nump und verwendet [] emply list, wenn das subject_code Feld von einem anderen Typ ist oder Null

+0

Vielen Dank, Mann –