sql >> Database >  >> NoSQL >> MongoDB

MongoDB:Sorteer op bestaand veld en vervolgens alfabetisch

Wat dacht je van:

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

Want als een veld waarop u wilt sorteren niet echt aanwezig is, dan is de geretourneerde waarde null en daarom "lager" in de volgorde dan enig positief resultaat. Het is dus logisch om die resultaten uit te sluiten als u echt alleen op zoek bent naar iets met een overeenkomende waarde.

Als je echt alle resultaten erin wilt hebben en ongeacht een null inhoud, dan raad ik je aan ze te "wegen" via .aggregate() :

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

En dat verplaatst alle null resultaten naar het "einde van de keten" door een waarde als zodanig toe te kennen.



  1. Groeperen en tellen met voorwaarde

  2. Hoe kan ik een Meteor-verzameling sorteren op tijdstip van inbrengen?

  3. voorwaarde toevoegen aan meest recente waarden resultaat

  4. Redis - het wat, waarom en hoe Redis als primaire database te gebruiken