J'écris une webapp avec Node.js et mangouste. Comment paginer les résultats que j'obtiens d'un .find()
appel? Je voudrais une fonctionnalité comparable à "LIMIT 50,100"
SQL.
mongodb
node.js
pagination
mongoose
Thomas
la source
la source
Réponses:
Je suis très déçu par les réponses acceptées dans cette question. Cela ne sera pas mis à l'échelle. Si vous lisez les petits caractères sur cursor.skip ():
Pour obtenir une pagination de manière évolutive, combinez une limite () avec au moins un critère de filtre, une date createdOn convient à de nombreuses fins.
la source
-createdOn
', vous remplaceriez la valeur derequest.createdOnBefore
par la plus petite valeurcreatedOn
retournée dans le jeu de résultats précédent, puis requery.Après avoir examiné de plus près l'API Mongoose avec les informations fournies par Rodolphe, j'ai trouvé cette solution:
la source
Pagination avec mangouste, express et jade - Voici un lien vers mon blog avec plus de détails
la source
Math.max(0, undefined)
reviendraundefined
, Cela a fonctionné pour moi:let limit = Math.abs(req.query.limit) || 10;
let page = (Math.abs(req.query.page) || 1) - 1;
Schema.find().limit(limit).skip(limit * page)
Vous pouvez enchaîner comme ça:
Exécutez la requête à l'aide de
exec
la source
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 }); }); });
Dans ce cas, vous pouvez ajouter la requête
page
et / oulimit
à votre URL en tant que chaîne de requête.Par exemple:
?page=0&limit=25 // this would be added onto your URL: http:localhost:5000?page=0&limit=25
Puisque ce serait un
String
nous devons le convertir en unNumber
pour nos calculs. Faisons-le en utilisant laparseInt
méthode et fournissons également quelques valeurs par défaut.La pagination BTW commence par
0
la source
mongoose
.Vous pouvez utiliser un petit paquet appelé Mongoose Paginate qui le rend plus facile.
Après dans vos routes ou votre contrôleur, ajoutez simplement:
la source
Voici un exemple d'exemple que vous pouvez essayer,
la source
Essayez d'utiliser la fonction mangouste pour la pagination. La limite est le nombre d'enregistrements par page et le numéro de la page.
la source
Voilà ce que je l'ai fait sur le code
C'est comme ça que je l'ai fait.
la source
count()
est obsolète. utilisationcountDocuments()
Requete;
search = productName,
Params;
page = 1
la source
Voici une version que j'attache à tous mes modèles. Cela dépend du trait de soulignement pour plus de commodité et de l'async pour les performances. L'option permet la sélection et le tri des champs à l'aide de la syntaxe mangouste.
Attachez-le à votre schéma de modèle.
la source
Solution de pagination simple et puissante
last_doc_id
: le dernier identifiant de document que vous obtenezno_of_docs_required
: le nombre de documents que vous souhaitez récupérer soit 5, 10, 50 etc.last_doc_id
pas la méthode, vous obtiendrez, par exemple, les 5 derniers documentslast_doc_id
vous obtiendrez les 5 documents suivants.la source
La réponse ci-dessus est valable.
la source
vous pouvez également utiliser la ligne de code suivante
ce code fonctionnera dans la dernière version de mongo
la source
Une approche solide pour implémenter cela serait de passer les valeurs du frontend en utilisant une chaîne de requête . Disons que nous voulons obtenir la page n ° 2 et limiter également la sortie à 25 résultats .
La chaîne de requête ressemblerait à ceci:
?page=2&limit=25 // this would be added onto your URL: http:localhost:5000?page=2&limit=25
Voyons le code:
Je suggérerais d'implémenter cette logique dans un middleware afin que vous puissiez l'utiliser pour divers itinéraires / contrôleurs.
la source
Le moyen le plus simple et le plus rapide est de paginer avec l'exemple objectId;
Condition de charge initiale
Prendre le premier et le dernier ObjectId des données de réponse
Page condition suivante
Page condition suivante
Chez la mangouste
la source
La meilleure approche (OMI) consiste à utiliser sauter et limiter MAIS dans une collection ou des documents limités.
Pour effectuer la requête dans des documents limités, nous pouvons utiliser un index spécifique tel qu'un index sur un champ de type DATE. Voir ci-dessous
la source
Plugin le plus simple pour la pagination.
https://www.npmjs.com/package/mongoose-paginate-v2
Ajoutez un plugin à un schéma, puis utilisez la méthode de pagination du modèle:
la source
Ceci est un exemple de fonction pour obtenir le résultat d'un modèle de compétences avec des options de pagination et de limite
}
la source
Vous pouvez écrire une requête comme celle-ci.
page: numéro de page provenant du client comme paramètres de requête.
per_page: aucun résultat affiché par page
Si vous utilisez la pile MEAN, le billet de blog suivant fournit une grande partie des informations pour créer la pagination en amont à l'aide de bootstrap angular-UI et des méthodes de saut et de limitation de mangouste dans le backend.
voir: https://techpituwa.wordpress.com/2015/06/06/mean-js-pagination-with-angular-ui-bootstrap/
la source
Vous pouvez soit utiliser skip () et limit (), mais c'est très inefficace. Une meilleure solution serait un tri sur un champ indexé plus une limite (). Chez Wunderflats, nous avons publié une petite bibliothèque ici: https://github.com/wunderflats/goosepage Il utilise la première façon.
la source
Si vous utilisez la mangouste comme source pour une api reposante, jetez un œil à ' restify-mongoose ' et ses requêtes. Il a exactement cette fonctionnalité intégrée.
Toute requête sur une collection fournit des en-têtes utiles ici
Donc, fondamentalement, vous obtenez un serveur générique avec un temps de chargement relativement linéaire pour les requêtes vers les collections. C'est génial et quelque chose à regarder si vous voulez entrer dans une propre implémentation.
la source
la source
la source
Utilisez ce plugin simple.
https://github.com/WebGangster/mongoose-paginate-v2
Installation
la source
selon
répondre:
la source
Utilisation de ts-mongoose-pagination
la source
la source
A également pu obtenir des résultats avec async / wait.
Exemple de code ci-dessous utilisant un gestionnaire asynchrone avec hapi v17 et mongoose v5
la source