MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :Trier par champ existant puis par ordre alphabétique

Que diriez-vous :

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

Parce qu'après tout, lorsqu'un champ sur lequel vous voulez trier n'est pas réellement présent, la valeur renvoyée est null et donc "inférieur" dans l'ordre à tout résultat positif. Il est donc logique d'exclure ces résultats si vous ne recherchez vraiment que quelque chose avec une valeur correspondante.

Si vous voulez vraiment tous les résultats là-dedans et indépendamment d'un null contenu, alors je vous suggère de les "pondérer" via .aggregate() :

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

Et cela déplace tous les null résultats au « bout de la chaîne » en attribuant une valeur en tant que telle.