Sortowanie w mongo

0

Zastanawia mnie jedna rzecz odnosnie sortowania w mongo. Jeśli chcę posortować kolekcję w oparciu o kilka pól wówczas przekazuje do metody sort obiekt z polami jakie chcę uwzględnić w sortowaniu:

db.players.find().sort({scores: -1, gold: -1})

Nie jestem jednak pewien czy to poprawne podejście. Przecież obiekty w JS nie gwarantują kolejności pól w utworzonym obiekcie. Co znaczy, że czasem metoda sort może odczytać obiekt jak {gold: -1, scores: -1}, a czasem jak {scores: -1, gold: -1}, a przecież w tym przypadku to jest różnica.

0

A nie możesz użyć (nie znam dobrz JS i Mongo) czegos takiego:

db.players.find().sort({scores: -1}).sort({gold: -1})
0

Wtedy wynik końcowy obejmuje tylko sortowanie z ostatniego wywołania sort.

0

Można wywołać to w odwrotnej kolejności niż się zamierza (wtedy wynik jest ok), ale widocznie mongo sortuje to dwa razy.

0

Orientuje się ktoś czy w Mongo jest możliwe sortowanie po miejscu (indeksie) wystąpienia w stringu danego wzorca?
Przykładowo szukam miasta "Zamość". Po wpisaniu frazy "zam" jako pierwsze powinno pojawić się "Zamość", a kolejno np. "Wielkie Zamczysko".

1

@siloam:

Przykładowa baza forum 4Programmers, jest pole "name"
https://4programmers.net/Mikroblogi/View/92315

Szukasz wśród użytkowników 4P kotów : cat/Cat i sortujesz po pozycji wystąpienia kota - założenie dodatkowe: Cat < cat (jak ASCII)

db.getCollection("users").aggregate([
{$match:{"name":{$regex:/[cC]at/}}},
{$project:
{_id:0,name:1,
position_small:{$indexOfCP:["$name",'cat']},
position_big:{$indexOfCP:["$name",'Cat']},
}},
{$sort:{
position_small:1,
position_big:1,
name:-1,
},
},
]);

Posortowane Koty na 4P

+------------------------------+------------+--------------+
|name                          |position_big|position_small|
+------------------------------+------------+--------------+
|Catty82                       |0           |-1            |
|Catty                         |0           |-1            |
|Catosik                       |0           |-1            |
|Cato_                         |0           |-1            |
|Cato                          |0           |-1            |
|Catjit1161                    |0           |-1            |
|Cathy                         |0           |-1            |
|CatchTime                     |0           |-1            |
|Catalonya1992                 |0           |-1            |
|Cataleya                      |0           |-1            |
|CatXeN                        |0           |-1            |
|SlavCat                       |4           |-1            |
|RoboCat                       |4           |-1            |
|HellCat                       |4           |-1            |
|BlueCat                       |4           |-1            |
|GonnaCatchU                   |5           |-1            |
|BlackCat213                   |5           |-1            |
|TheFatCat                     |6           |-1            |
|RoboBoboCat                   |8           |-1            |
|Cheshire Cat                  |9           |-1            |
|Krystian “CopyCat” Nowak      |14          |-1            |
|Balthasar the Cat             |14          |-1            |
|cattreen                      |-1          |0             |
|catshy                        |-1          |0             |
|catsanddogs19                 |-1          |0             |
|cats                          |-1          |0             |
|caton                         |-1          |0             |
|catom                         |-1          |0             |
|catisun                       |-1          |0             |
|cathysimpson                  |-1          |0             |
|catherina                     |-1          |0             |
|catchor                       |-1          |0             |
|catchmeifyoucan               |-1          |0             |
|catch me                      |-1          |0             |
|catcat                        |-1          |0             |
|catalyst243                   |-1          |0             |
|catalyst                      |-1          |0             |
|cat_black                     |-1          |0             |
|cat84                         |-1          |0             |
|cat                           |-1          |0             |
|Scatman89                     |-1          |1             |
|Scatman1                      |-1          |1             |
|Scatman                       |-1          |1             |
|4catt                         |-1          |1             |
|owcatoja                      |-1          |2             |
|micatari                      |-1          |2             |
|hicat                         |-1          |2             |
|ducati                        |-1          |2             |
|d1catt                        |-1          |2             |
|alcatrass                     |-1          |2             |
|S-cat                         |-1          |2             |
|Alcatraz                      |-1          |2             |
|Alcatar                       |-1          |2             |
|tomcat                        |-1          |3             |
|tadcat                        |-1          |3             |
|madcat                        |-1          |3             |
|keycat                        |-1          |3             |
|educativo.pl                  |-1          |3             |
|educat                        |-1          |3             |
|Tomcat_                       |-1          |3             |
|Tomcat12                      |-1          |3             |
|suricat                       |-1          |4             |
|relocateme.eu                 |-1          |4             |
|plotcat                       |-1          |4             |
|goodcat                       |-1          |4             |
|freecat                       |-1          |4             |
|dedicated                     |-1          |4             |
|copycat45                     |-1          |4             |
|blancatttt                    |-1          |4             |
|RelocateMe                    |-1          |4             |
|Ironcat                       |-1          |4             |
|Benycat                       |-1          |4             |
|willscater                    |-1          |5             |
|vindicator                    |-1          |5             |
|pussycat                      |-1          |5             |
|felixcatus                    |-1          |5             |
|dreamcatcher                  |-1          |5             |
|blackcatcher                  |-1          |5             |
|Survicate                     |-1          |5             |
|NoEducation                   |-1          |5             |
|Mysticate                     |-1          |5             |
|certificates4sale             |-1          |7             |
|Pusheencat                    |-1          |7             |
|Excommunicater                |-1          |9             |
|spacecybercat                 |-1          |10            |
|pocketsizecat                 |-1          |10            |
|Filozofification              |-1          |10            |
|XnetCommunications            |-1          |11            |
|little-blackcat               |-1          |12            |
|valid certificate manufacturer|-1          |13            |
|PusheenFatTomcat              |-1          |13            |
+------------------------------+------------+--------------+
1

Dzięki.$search szuka po całych słowach, a mnie interesuje prawdziwy fulltext z wyszukiwaniem śródtekstowym w aggregate ( to chyba dopiero od wersji 4, a dostęp mam do 3). Swoją drogą MongoDB miało być prostsze od baz relacyjnych, a przekształciło się w niezłą kobyłę z wieloma wzmiankami "restrictions" w dokumentacji. Szkoda, projekt się fajnie zapowiadał. Zostanę jednak przy PostgreSQL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1