sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:Sortera efter befintligt fält och sedan alfabetiskt

Vad sägs om:

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

För när allt kommer omkring när ett fält du vill sortera på faktiskt inte finns så är det returnerade värdet null och därför "lägre" i ordningen än något positivt resultat. Så det är vettigt att utesluta dessa resultat om du verkligen bara letar efter något med ett matchande värde.

Om du verkligen vill ha alla resultat där och oavsett en null innehåll, då föreslår jag att du "vikter" dem via .aggregate() :

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

Och det flyttar alla null resultat till "slutet av kedjan" genom att tilldela ett värde som sådant.



  1. Uppdatera kapslade arrayobjekt baserat på en egenskap i MongoDB

  2. Mongorestore i en Dockerfile

  3. 9 nya MongoDB-funktioner – måste lära sig att bemästra i MongoDB

  4. MongoDB $dayOfYear