MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:Sortieren nach vorhandenem Feld und dann alphabetisch

Wie wäre es mit:

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

Denn wenn ein Feld, nach dem Sie sortieren möchten, nicht vorhanden ist, ist der zurückgegebene Wert null und damit "niedriger" in der Reihenfolge als jedes positive Ergebnis. Es ist also sinnvoll, diese Ergebnisse auszuschließen, wenn Sie wirklich nur nach etwas mit einem passenden Wert suchen.

Wenn Sie wirklich alle Ergebnisse dort haben wollen und unabhängig von einem null Inhalt, dann schlage ich vor, dass Sie sie über .aggregate() "gewichten". :

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

Und das verschiebt alle null Ergebnisse bis zum "Ende der Kette", indem Sie einen Wert als solchen zuweisen.