MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB:Classifique por campo existente e depois em ordem alfabética


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

Porque, afinal, quando um campo que você deseja classificar não está realmente presente, o valor retornado é null e, portanto, "mais baixo" na ordem do que qualquer resultado positivo. Portanto, faz sentido excluir esses resultados se você realmente estiver procurando apenas algo com um valor correspondente.

Se você realmente quer todos os resultados e independentemente de um null conteúdo, então sugiro que você os "pese" via .aggregate() :
db.users.aggregate([
     { "$project": {
         "name": 1,
         "score": {
             "$cond": [
                 { "$ifNull": [ "$name", false ] },
                 1,
                 10
             ]
         }
     }},
     { "$sort": { "score": 1, "name": 1 } }
])

E isso move todos os null resultados ao "fim da cadeia" atribuindo um valor como tal.