2013-06-04 15 views
5
db.jason.find().sort({"rank":1}) 

{ "_id" : ObjectId("51ae517372779b7eeeb81342"), "name" : "jason" } 
{ "_id" : ObjectId("51ae517372779b7eeeb81343"), "name" : "jason" } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133a"), "name" : "jason", "rank" : 0 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133b"), "name" : "jason", "rank" : 1 } 
{ "_id" : ObjectId("51ae513772779b7eeeb8133c"), "name" : "jason", "rank" : 2 } 

Chciałbym dokumentów bez rangi, aby zakończyć sortowania vs początku ... ale także zachować pozycje z pozycji w kolejności asc. Czy jest to możliwe, czy też domyślne puste powinny być ciągiem lub wysokim numerem jak 99999?Czy mongo może zwracać dokumenty z pustymi/brakującymi polami na końcu w kolejności asc?

Odpowiedz

5

Po zwróceniu wyniku dla db.jason.find().sort({"rank":1}), MongoDB zamawia dokumenty według "rangi", a następnie według "rangi" wartości. W celu sortowania kolejności, MongoDB traktuje dokumenty, w których brakuje pola jako mające typ NULL dla tego pola. Typ NULL jest uporządkowany przed typami liczbowymi i nie można tego zmienić (patrz http://docs.mongodb.org/manual/reference/method/cursor.sort/ dla wbudowanej kolejności sortowania typu). Sugerowałbym raczej utworzenie dwóch zapytań (jeden dla dokumentów zawierających "kategorię", a drugi dla dokumentów bez "rangi") i połączenie wyników w twojej aplikacji. Jeśli jednak chcesz zachować tę pojedynczą kwerendę, musisz ustawić "rangę" we wszystkich dokumentach, aby wygenerować pożądaną kolejność (na przykład za pomocą wartości wartownika z typem sortującym według typów liczbowych).

+0

Zgaduję, czy znasz funkcję [eval()] (http://docs.mongodb.org/manual/reference/command/eval/), wygląda na to, że będzie w stanie obsłużyć sortowanie niestandardowe, ale nie jestem pewien o pustych polach. – jasonsemko

Powiązane problemy