2012-04-04 26 views
6

Mam świadomość, że za pośrednictwem interfejsu API REST można określić parametr "limit" (np.? Limit = 5), aby ograniczyć liczbę wyników zwracanych z danego widoku w CouchDB.Korzystanie z parametru "limit" w funkcji widoku mapy CouchDB

Moje pytanie brzmi, czy istnieje sposób, aby to zrobić wewnątrz samej funkcji mapy w widoku ...?

+3

Czy możesz podać więcej informacji? Co chcesz robić? –

Odpowiedz

5

Odpowiedź na twoje pytanie brzmi "nie".

Funkcja mapy zostaje zastosowana do każdego dokumentu w bazie danych, a funkcja redukcji, jeśli jest zdefiniowana, jest stosowana do każdego wyniku zmniejszania. Pomyśl o komputerach.

Parametry zapytania podane w adresie URL są stosowane do drzewa B +, na którym budowane są funkcje MapReduce. Na przykład, jeśli powiesz ?limit=5, jako wyniki zostanie użyta piątka po lewej stronie większości liści w drzewie. Lub, jeśli powiesz ?limit=5&descending=true, pięć pięciu najbardziej prawych liści w drzewie zostanie użytych jako wyniki.

Jednak to, co próbujesz osiągnąć, wykonując funkcję ?limit=5 w funkcji Map, może zostać wykonane w inny sposób. Na przykład aplikacja może zawierać coś w dokumentach, które spowodowało, że zostaną one warunkowo uwzględnione w wynikach. Lub wymuszenie, że tylko pięć dokumentów jest oznaczonych jako indeksu, choć byłoby to uciążliwe i, w zależności od rozmiaru bazy danych, kosztowne.

Pozdrawiam.

0

Jeśli jesteś UUID-ami są sekwencyjne (możesz sprawdzić konfigurację do tego), możesz być w stanie wykorzystać to samo do obejrzenia pierwszych pięciu dokumentów.

0

Nie jest możliwa funkcja map. Ponieważ mapa będzie zajmować się każdym dokumentem osobno, a być może jednocześnie, na dowolnym oddzielnym węźle. Nie może być świadomy innego dokumentu w ogóle

Ale myślę, że to, co chcesz, byłoby możliwe z reduce. Zmniejszanie byłoby uruchamiane po wykonaniu funkcji mapy i rób wszystko, a wszystkie wyniki są obecne. Więc można modyfikować wynik z map w jakikolwiek sposób

Upraszczając, można użyć reduce aby grupować wiersze z tego samego klucza, a następnie można przyciąć każdą grupę mieć tylko 5 wyniki (w rereduce jeśli dobrze pamiętam)

Powiązane problemy