MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So sortieren Sie mongodb-Abfrageergebnisse basierend auf Unterdokumenten

Sie können cursor.sort() verwenden nach mehreren Feldern (im Grunde ein Kombinationsfeld) gleichzeitig zu sortieren, aber ich glaube nicht, dass es funktioniert, wenn gleichzeitig nach einem Dokument und einem Unterdokumentfeld sortiert wird. Wenn Sie nach zwei verschiedenen Feldern des obersten Dokuments sortieren würden oder auf zwei verschiedenen Feldern eines Filialdokuments, dann wäre es in Ordnung, denke ich.

Sie können also eine ähnliche Ausgabe mit der Aggregation erhalten Rahmen. Alles, was Sie tun müssen, ist im Grunde die Arrays der subs aufzuschlüsseln Feld und dann sortieren Sie.

Sie könnten so etwas tun:

db.col.aggregate({$unwind:'subs'}, {$sort:{id:1,'subs.time':1}});

Mit dem obigen Code sollten Sie eine Ausgabe ähnlich dieser erhalten:

 { 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 1, val: 'ab' }
},{ 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 20, val: 'cs' }
},{ 
    id: 1, 
    type: 'strs', 
    subs: 
        { time: 50, val: 'be' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 12, val: 'a' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 20, val: 'b' }
},{ 
    id: 2, 
    type: 'newname', 
    subs: 
        { time: 30, val: 'c' }
}