Estou escrevendo um webapp com Node.js e mangusto. Como posso paginar os resultados de uma .find()
chamada? Eu gostaria de uma funcionalidade comparável à "LIMIT 50,100"
do SQL.
mongodb
node.js
pagination
mongoose
Thomas
fonte
fonte
Respostas:
Estou muito decepcionado com as respostas aceitas nesta pergunta. Isso não será dimensionado. Se você ler as letras pequenas em cursor.skip ():
Para alcançar a paginação de maneira escalável, combine um limite () com pelo menos um critério de filtro, uma data createdOn é adequada a muitos propósitos.
fonte
-createdOn
', você substitui o valor derequest.createdOnBefore
com o menor valorcreatedOn
retornado no conjunto de resultados anterior, e depois requery.Depois de examinar mais de perto a API do Mongoose com as informações fornecidas por Rodolphe, descobri esta solução:
fonte
Paginação usando mangusto, expresso e jade - Aqui está um link para o meu blog com mais detalhes
fonte
Math.max(0, undefined)
retornaráundefined
, isso funcionou para mim:let limit = Math.abs(req.query.limit) || 10;
let page = (Math.abs(req.query.page) || 1) - 1;
Schema.find().limit(limit).skip(limit * page)
Você pode encadear assim:
Execute a consulta usando
exec
fonte
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 }); }); });
Nesse caso, você pode adicionar a consulta
page
e / oulimit
ao seu URL como uma string de consulta.Por exemplo:
?page=0&limit=25 // this would be added onto your URL: http:localhost:5000?page=0&limit=25
Como seria um
String
, precisamos convertê-lo em umNumber
para nossos cálculos. Vamos fazer isso usando oparseInt
método e também fornecer alguns valores padrão.A paginação entre BTW começa com
0
fonte
mongoose
.Você pode usar um pequeno pacote chamado Mongoose Paginate que facilita.
Depois de suas rotas ou controlador, basta adicionar:
fonte
Este é um exemplo de exemplo, você pode tentar isso,
fonte
Tente usar a função mangusto para paginação. Limite é o número de registros por página e o número da página.
fonte
Isto é o que eu fiz no código
Foi assim que eu fiz.
fonte
count()
está obsoleto. usecountDocuments()
Inquerir;
search = productName,
Params;
page = 1
fonte
Aqui está uma versão que eu anexo a todos os meus modelos. Depende do sublinhado para conveniência e assíncrono para desempenho. O opts permite a seleção e classificação de campos usando a sintaxe do mangusto.
Anexe-o ao esquema do modelo.
fonte
Solução de paginação simples e poderosa
last_doc_id
: o último ID do documento que você obtémno_of_docs_required
: o número de documentos que você deseja buscar, por exemplo, 5, 10, 50 etc.last_doc_id
método, receberá 5 documentos mais recenteslast_doc_id
, receberá os próximos 5 documentos.fonte
A resposta acima é válida.
fonte
você também pode usar a seguinte linha de código
este código funcionará na versão mais recente do mongo
fonte
Uma abordagem sólida para implementar isso seria passar os valores do front-end usando uma string de consulta . Digamos que queremos obter a página 2 e também limitar a saída a 25 resultados .
A string de consulta ficaria assim:
?page=2&limit=25 // this would be added onto your URL: http:localhost:5000?page=2&limit=25
Vamos ver o código:
Eu sugeriria implementar essa lógica no middleware para que você possa usá-la em várias rotas / controladores.
fonte
A maneira mais fácil e rápida é paginar com o objectId Example;
Condição de carga inicial
Pegue o primeiro e o último ObjectId dos dados de resposta
Página próxima condição
Página próxima condição
Em mangusto
fonte
A melhor abordagem (IMO) é usar ignorar e limitar, MAS dentro de coleções ou documentos limitados.
Para fazer a consulta em documentos limitados, podemos usar um índice específico, como o índice, em um campo do tipo DATE. Veja isso abaixo
fonte
O plugin mais fácil para paginação.
https://www.npmjs.com/package/mongoose-paginate-v2
Inclua o plug-in em um esquema e, em seguida, use o método de paginação do modelo:
fonte
Esta é uma função de exemplo para obter o resultado do modelo de habilidades com opções de paginação e limite
}
fonte
Você pode escrever uma consulta como esta.
page: número da página proveniente do cliente como parâmetros de solicitação.
por página: nenhum dos resultados mostrados por página
Se você estiver usando a pilha MEAN, a seguinte postagem no blog fornecerá muitas informações para criar paginação no front end usando a inicialização por interface angular da interface do usuário e os métodos de ignorar e limitar o mangusto no back-end.
consulte: https://techpituwa.wordpress.com/2015/06/06/mean-js-pagination-with-angular-ui-bootstrap/
fonte
Você pode usar skip () e limit (), mas é muito ineficiente. Uma solução melhor seria uma classificação no campo indexado mais limit (). Nós da Wunderflats publicamos uma pequena lib aqui: https://github.com/wunderflats/goosepage Ele usa da primeira maneira.
fonte
Se você estiver usando o mangusto como fonte para uma API repousante, dê uma olhada em ' restify-mongoose ' e suas consultas. Ele possui exatamente essa funcionalidade incorporada.
Qualquer consulta em uma coleção fornece cabeçalhos úteis aqui
Então, basicamente, você obtém um servidor genérico com um tempo de carregamento relativamente linear para consultas a coleções. Isso é incrível e algo para se olhar, se você quiser entrar em uma implementação própria.
fonte
fonte
fonte
Use este plugin simples.
https://github.com/WebGangster/mongoose-paginate-v2
Instalação
fonte
de acordo com
responda:
fonte
Usando ts-mongoose-pagination
fonte
fonte
Conseguiu alcançar resultados com async / wait também.
Exemplo de código abaixo usando um manipulador assíncrono com hapi v17 e mangusto v5
fonte