اذهب إلى المحتوى

السؤال

نشر

لدي مجموعة كبيرة من البيانات. عند استخدام mongoose في node.js وبالاستعلام find أرغب بالحصول على النتائج بهئية صفحات حتى لا يتم إرسال كافة البيانات دفعة واحدة إلى المستخدم

كيف يمكنني إضافة حد معيّن لعدد النتائج التي سيتم استعادتها بشكل مشابه ل "LIMIT 50,100" في قواعد بيانات SQL. وكيف يمكنني أيضاً تطبيق مبدأ pagination وتمرير هذه القيم بشكل متغيرات إلى الاستعلام؟

Recommended Posts

  • 0
نشر

لقد اكتشفت مؤخرا مكتبة تجعل ال pagination في mongoose سهل جدا وهي mongoose-paginate-v2

وهذه الشيفرة تلخص الاستخدام

const mongoose = require('mongoose');
const mongoosePaginate = require('mongoose-paginate-v2');

const mySchema = new mongoose.Schema({
  /* your schema definition */
});

mySchema.plugin(mongoosePaginate);

const myModel = mongoose.model('SampleModel', mySchema);

myModel.paginate().then({}); // Usage

المكتبة هي بمثابة plugin ل mongoose ويمكنك أن تعطي paginate كاءن option و query 

var query = {};
var options = {
  select: 'title date author',
  sort: { date: -1 },
  populate: 'author',
  lean: true,
  offset: 20,
  limit: 10,
};

Book.paginate(query, options).then(function (result) {
  // ...
});

 

  • 0
نشر

يمكن إجراء ذلك بعدة طرق، يختلف تطبيق كل طريقة حسب حجم البيانات والأداء الذي ترغب بالحصول عليه في تطبيقك فبعض الطرق قد تكون أسرع من غيرها، ولكن المبدأ هو بإلتحكم بخصائص الاستعلام التالية: count - limit - skip، مثال باستخدام  skip و limit:

find({},{fields to show},{ skip: 10, limit: 5 }, function(err, results) { ... });

حيث يمكنك تمرير قيم متغيرة لكل من skip وهي عدد السجلات التي سيتم إهمالها استعادة السجلات التي تبدأ بعد هذا الرقم، و limit وهو العدد الإجمالي للسجلات التي سيتم استعادتها.

مثال آخر:

var perPage = 10 , page = Math.max(0, req.params.page)

mymodel.find()
    .limit(perPage)
    .skip(perPage * page)
    .exec(function(err, data) {
        mymodel.count().exec(function(err, count) {
            res.render('data', {
                mydata: data,
                page: page,
                pages: count / perPage
            })
        })
    })

وبهذه الطريقة ستتمكن من إرسال معلومات عن العدد الإجمالي للصفحات الموجودة وعدد السجلات في كل صفحة والتي تساعد في إظهار أرقام الصفحات في واجهة المستخدم

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...