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

MongoDB:Sorter efter eksisterende felt og derefter alfabetisk

Hvad med:

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

For når alt kommer til alt, når et felt, du vil sortere på, faktisk ikke er til stede, er den returnerede værdi null og derfor "lavere" i rækkefølgen end noget positivt resultat. Så det giver mening at udelukke disse resultater, hvis du virkelig kun leder efter noget med en matchende værdi.

Hvis du virkelig vil have alle resultaterne derinde og uanset en null indhold, så foreslår jeg, at du "vægter" dem via .aggregate() :

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

Og det flytter alle null resultater til "enden af ​​kæden" ved at tildele en værdi som sådan.



  1. REACT anmodning om hentning af indlæg

  2. Forbind NodeJS til MongoDB Droplet

  3. Opdater indlejret objekt i MongoDB, hvis det findes, ellers tilføj det

  4. Hvordan fjerner man kun et eller to felter fra dokumenter i mongodb?