sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man sorterar mongodb-frågeresultat baserat på underdokument

Du kan använda cursor.sort() att sortera på flera fält (i princip en kombination) samtidigt men jag tror inte att det fungerar när man sorterar på både ett dokument och ett underdokumentfält samtidigt. Om du skulle sortera på två olika fält i det översta dokumentet eller på två olika fält i ett underdokument så skulle det vara bra antar jag.

Så du kan få en liknande utdata med aggregation ramverk. Allt du behöver göra är att i princip bryta ner arrayerna för subs och sedan sortera dem.

Du kan göra något som:

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

Med ovanstående kod bör du få en utdata som liknar denna:

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


  1. Hur beräknar man tidsstämpelskillnaden i mongodb (i timmar)?

  2. Hur skapar man ett kapslat index i MongoDB?

  3. Använda $in i MongooseJS med kapslade objekt

  4. Vilken av CouchDB eller MongoDB passar mina behov?