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

MongoDB:Ordina per campo esistente e poi in ordine alfabetico

Che ne dici di:

db.users.find({ "name": { "$exists": true } }).sort({'name': 1})

Perché dopotutto quando un campo su cui vuoi eseguire l'ordinamento non è effettivamente presente, il valore restituito è null e quindi "inferiore" nell'ordine a qualsiasi risultato positivo. Quindi ha senso escludere quei risultati se stai davvero cercando solo qualcosa con un valore corrispondente.

Se vuoi davvero tutti i risultati lì dentro e indipendentemente da un null content, quindi ti suggerisco di "penderli" tramite .aggregate() :

db.users.aggregate([
     { "$project": {
         "name": 1,
         "score": {
             "$cond": [
                 { "$ifNull": [ "$name", false ] },
                 1,
                 10
             ]
         }
     }},
     { "$sort": { "score": 1, "name": 1 } }
])

E questo sposta tutto null risultati alla "fine della catena" assegnando un valore in quanto tale.