sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Seřaďte podle existujícího pole a poté podle abecedy

Co třeba:

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

Protože koneckonců, když pole, podle kterého chcete třídit, není ve skutečnosti přítomno, vrácená hodnota je null a tedy "nižší" v objednávce než jakýkoli kladný výsledek. Pokud tedy skutečně hledáte pouze něco s odpovídající hodnotou, má smysl tyto výsledky vyloučit.

Pokud tam opravdu chcete mít všechny výsledky a bez ohledu na null obsah, pak navrhuji, abyste je "zvážili" pomocí .aggregate() :

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

A to přesune vše null výsledkem je "konec řetězce" přiřazením hodnoty jako takové.



  1. GeoLocation API Volání proti EVE RESTful API

  2. Vytváření ovladače mongo-cxx pomocí CMake ExternalProject_Add

  3. Jak zkontrolovat připojení k mongodb

  4. Odstranění jednoho objektu z pole objektů v MongoDB