sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:ordenar por campo existente y luego alfabéticamente

¿Qué tal:

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

Porque, después de todo, cuando un campo que desea ordenar no está realmente presente, el valor devuelto es null y por lo tanto "inferior" en el orden que cualquier resultado positivo. Por lo tanto, tiene sentido excluir esos resultados si realmente solo está buscando algo con un valor coincidente.

Si realmente desea todos los resultados allí e independientemente de un null contenido, entonces te sugiero que los "peses" a través de .aggregate() :

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

Y eso mueve todo null resultados hasta el "final de la cadena" asignando un valor como tal.