MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come ordinare i risultati delle query mongodb in base ai documenti secondari

Puoi usare cursor.sort() per ordinare su più campi (fondamentalmente una combinazione) contemporaneamente ma non penso che funzioni quando si ordina contemporaneamente sia un documento che un campo di documento secondario. Se dovessi ordinare su due campi diversi del documento principale o su due diversi campi di un documento secondario, credo che andrebbe bene.

Quindi puoi ottenere un output simile usando l'aggregazione struttura. Tutto quello che devi fare è fondamentalmente suddividere gli array dei subs campo e quindi ordina loro.

Potresti fare qualcosa come:

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

Con il codice sopra dovresti ottenere un output simile a questo:

 { 
    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' }
}