sql >> Databáze >  >> NoSQL >> MongoDB

Jak seřadit výsledky dotazu mongodb na základě vnořených dokumentů

Můžete použít cursor.sort() třídit podle více polí (v podstatě kombo) současně, ale nemyslím si, že to funguje při současném řazení podle dokumentu i pole vnořeného dokumentu. Pokud byste třídili podle dvou různých polí horního dokumentu nebo na dvou různých polích vnořeného dokumentu, pak by to bylo v pořádku, myslím.

Podobný výstup tedy můžete získat pomocí agregace rámec. Vše, co musíte udělat, je v podstatě rozdělit pole subs pole a poté seřadit jim.

Můžete udělat něco jako:

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

S výše uvedeným kódem byste měli získat výstup podobný tomuto:

 { 
    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. Nelze získat připojení Jedis při použití SSL s Redis a Spring Data Redis

  2. Poslouchejte události opětovného připojení v ovladači MongoDB

  3. Spring Data MongoDB – Kde programově vytvořit index pro kolekci Mongo?

  4. Uložit podmnožinu sbírky MongoDB do jiné sbírky