Jedną z moich kolekcji jest lista operacji (lub zadań) o pewnym statusie. Na przykład, lista dokumentów może wyglądać następującoSortowanie MongoDB z niestandardowym wyrażeniem lub funkcją
{
_id: '57befe57fc956d2e3252890c',
task: 'Go buy milk',
status: 'pending'
},
{
_id: '57befe5efc956d2e3252890d',
task: 'Cook dinner',
status: 'complete'
},
{
_id: '57befe5efc956d2e3252890e',
task: 'Play games',
status: 'new'
}
chcę uporządkować tę listę w oparciu o ich status, gdzie new > pending > complete
.
Jak mogę to zrobić w MongoDB bez konieczności tworzenia dodatkowego pola? Pytam, jak w moim przypadku, kolejność sortowania może być wstępnie skonfigurowana (tj. Użytkownicy mogą mieć swoje preferencje na przykład na pending > new > complete
).
Czy istnieje powód, dlaczego nie można obsługiwać t sortuje po stronie klienta? Najlepiej jest zwrócić wszystkie dokumenty, a następnie użyć filtra do utworzenia podgrup na podstawie kolejności preferencji użytkownika. https://lodash.com/docs#filter – dyouberg
Można to zrobić za pomocą potoku agregacji z dwoma potokami , '$ project' i' $ sort'. '$ Project' utworzy dodatkowe pole, na przykład' score', które zostanie wypełnione na podstawie wstępnie skonfigurowanego zamówienia z operatorem '$ cond', więc na przykład dla powyższego wyniku dla' status', "nowy" będzie wynosił 3, dla oczekując 2 itd., potok '$ sort' posortuje w polu wyniku. – chridam
@dyouberg Używam stronicowania, a sortowanie musi zostać wykonane przed '$ limit', po stronie serwera, w przeciwnym razie paginacja jest pomieszana. Dlaczego sugerujesz pobieranie wszystkich elementów do klienta? To złe wykorzystanie przepustowości i przetwarzania. –