Piszę aplikację internetową za pomocą Node.js i mangusty. Jak mogę podzielić strony na wyniki otrzymane z .find()
połączenia? Chciałbym funkcjonalność porównywalną z "LIMIT 50,100"
SQL.
mongodb
node.js
pagination
mongoose
Tomasz
źródło
źródło
Odpowiedzi:
Jestem bardzo rozczarowany zaakceptowanymi odpowiedziami na to pytanie. To nie będzie skalowane. Jeśli czytasz drobny druk na kursor.skip ():
Aby uzyskać podział na strony w skalowalny sposób, należy połączyć limit () z co najmniej jednym kryterium filtru, data „Utworzony” odpowiada wielu celom.
źródło
-createdOn
', zamienisz wartośćrequest.createdOnBefore
na najmniejszą wartośćcreatedOn
zwróconą w poprzednim zestawie wyników, i następniePo bliższym przyjrzeniu się Mongoose API z informacjami dostarczonymi przez Rodolphe, wymyśliłem to rozwiązanie:
źródło
Paginacja za pomocą mangusty, ekspresu i jadeitu - oto link do mojego bloga z bardziej szczegółowymi informacjami
źródło
Math.max(0, undefined)
wróciundefined
, To zadziałało dla mnie:let limit = Math.abs(req.query.limit) || 10;
let page = (Math.abs(req.query.page) || 1) - 1;
Schema.find().limit(limit).skip(limit * page)
Możesz łańcuch po prostu tak:
Wykonaj zapytanie za pomocą
exec
źródło
var page = req.param('p'); var per_page = 10; if (page == null) { page = 0; } Location.count({}, function(err, count) { Location.find({}).skip(page*per_page).limit(per_page).execFind(function(err, locations) { res.render('index', { locations: locations }); }); });
W takim przypadku możesz dodać zapytanie
page
i / lublimit
adres URL jako ciąg zapytania.Na przykład:
?page=0&limit=25 // this would be added onto your URL: http:localhost:5000?page=0&limit=25
Ponieważ byłoby to
String
konieczne, musimy go przekonwertować na wartośćNumber
dla naszych obliczeń. Zróbmy to za pomocąparseInt
metody i podajmy też wartości domyślne.BTW Podział na strony zaczyna się od
0
źródło
mongoose
.Możesz użyć małego pakietu o nazwie Mongoose Paginate, który ułatwia.
Następnie w swoich trasach lub kontrolerze po prostu dodaj:
źródło
To jest przykładowy przykład, który możesz wypróbować,
źródło
Spróbuj użyć funkcji mangusty do paginacji. Limit to liczba rekordów na stronę i liczba stron.
źródło
Tak zrobiłem na kodzie
Tak to zrobiłem.
źródło
count()
jest przestarzałe. użyciecountDocuments()
Pytanie;
szukaj = nazwa produktu,
Params;
strona = 1
źródło
Oto wersja, którą dołączam do wszystkich moich modeli. Zależy to od podkreślenia dla wygody i asynchronizacji wydajności. Opcja umożliwia wybór pola i sortowanie przy użyciu składni mangusty.
Dołącz go do schematu modelu.
źródło
Powyższa odpowiedź jest dobra.
źródło
Proste i wydajne rozwiązanie do paginacji
last_doc_id
: ostatni otrzymany identyfikator dokumentuno_of_docs_required
: liczba dokumentów, które chcesz pobrać, tj. 5, 10, 50 itd.last_doc_id
metody, otrzymasz np. 5 najnowszych dokumentówlast_doc_id
, otrzymasz kolejne, tj. 5 dokumentów.źródło
możesz również użyć następującego wiersza kodu
ten kod będzie działał w najnowszej wersji Mongo
źródło
Solidnym podejściem do realizacji tego byłoby przekazanie wartości z interfejsu użytkownika za pomocą ciągu zapytania . Powiedzmy, że chcemy uzyskać stronę 2, a także ograniczyć wynik do 25 wyników .
Ciąg zapytania wyglądałby następująco:
?page=2&limit=25 // this would be added onto your URL: http:localhost:5000?page=2&limit=25
Zobaczmy kod:
Sugeruję zaimplementowanie tej logiki w oprogramowaniu pośrednim, abyś mógł używać jej do różnych tras / kontrolerów.
źródło
Najłatwiejszym i szybszym sposobem jest paginowanie za pomocą obiektu objectId Przykład;
Początkowy stan obciążenia
Weź pierwszy i ostatni ObjectId z danych odpowiedzi
Strona następny warunek
Strona następny warunek
W mangusty
źródło
Najlepszym podejściem (IMO) jest stosowanie pomijania i ograniczania ALE w ramach ograniczonych zbiorów lub dokumentów.
Aby wykonać zapytanie w ramach ograniczonych dokumentów, możemy użyć określonego indeksu, takiego jak indeks w polu typu DATA. Zobacz to poniżej
źródło
Najłatwiejsza wtyczka do paginacji.
https://www.npmjs.com/package/mongoose-paginate-v2
Dodaj wtyczkę do schematu, a następnie użyj metody modelowania stronicowania:
źródło
Jest to przykładowa funkcja uzyskiwania wyniku modelu umiejętności z paginacją i opcjami limitów
}
źródło
Możesz napisać zapytanie w ten sposób.
strona: numer strony pochodzący od klienta jako parametry żądania.
na_stronę: liczba wyników wyświetlanych na stronie
Jeśli używasz stosu MEAN, następujący post na blogu zawiera wiele informacji na temat tworzenia stronicowania w interfejsie użytkownika za pomocą bootstrapu z angular-UI i metod pomijania i limitowania w backendu.
patrz: https://techpituwa.wordpress.com/2015/06/06/mean-js-pagination-with-angular-ui-bootstrap/
źródło
Możesz użyć skip () i limit (), ale jest to bardzo nieefektywne. Lepszym rozwiązaniem byłoby sortowanie według pola indeksowanego plus limit (). My w Wunderflats opublikowaliśmy małą bibliotekę tutaj: https://github.com/wunderflats/goosepage Używa pierwszej metody.
źródło
Jeśli używasz mangusty jako źródła spokojnego interfejsu API, spójrz na „ restify-mangusta ” i jej zapytania. Ma dokładnie tę wbudowaną funkcjonalność.
Każde zapytanie w kolekcji zawiera nagłówki, które są tutaj pomocne
Zasadniczo otrzymujesz ogólny serwer o stosunkowo liniowym czasie ładowania zapytań do kolekcji. To niesamowite i warto na nie spojrzeć, jeśli chcesz przejść do własnej implementacji.
źródło
źródło
źródło
Użyj tej prostej wtyczki.
https://github.com/WebGangster/mongoose-paginate-v2
Instalacja
źródło
według
odpowiedź:
źródło
Korzystanie z ts-mongoose-pagination
źródło
źródło
Był w stanie osiągnąć wyniki również asynchronicznie / czekaj.
Przykład kodu poniżej z użyciem asynchronicznego programu obsługi z hapi v17 i mongoose v5
źródło