zoukankan      html  css  js  c++  java
  • Mongoose的分页功能

    来自:

    https://github.com/edwardhotchkiss/mongoose-paginate

     

    拷贝如下:

    Note: This plugin will only work with Node.js >= 4.2 and Mongoose >= 4.2

    Installation

    npm install mongoose-paginate

    Usage

    Add plugin to a schema and then use model paginate method:

    var mongoose = require('mongoose');

    var mongoosePaginate = require('mongoose-paginate');

     

    var schema = new mongoose.Schema({ /* schema definition */ });

    schema.plugin(mongoosePaginate);

     

    var Model = mongoose.model('Model', schema); // Model.paginate()

    Model.paginate([query], [options], [callback])

    Parameters

    • [query] {Object} - Query criteria. Documentation
    • [options] {Object}
      • [select] {Object | String} - Fields to return (by default returns all fields). Documentation
      • [sort] {Object | String} - Sort order. Documentation
      • [populate] {Array | Object | String} - Paths which should be populated with other documents. Documentation
      • [lean=false] {Boolean} - Should return plain javascript objects instead of Mongoose documents? Documentation
      • [leanWithId=true] {Boolean} - If lean and leanWithId are true, adds id field with string representation of _idto every document
      • [offset=0] {Number} - Use offset or page to set skip position
      • [page=1] {Number}
      • [limit=10] {Number}
    • [callback(err, result)] - If specified the callback is called once pagination results are retrieved or when an error has occurred

    Return value

    Promise fulfilled with object having properties:

    • docs {Array} - Array of documents
    • total {Number} - Total number of documents in collection that match a query
    • limit {Number} - Limit that was used
    • [page] {Number} - Only if specified or default page/offset values were used
    • [pages] {Number} - Only if page specified or default page/offset values were used
    • [offset] {Number} - Only if specified or default page/offset values were used

    Examples

    Skip 20 documents and return 10 documents

    Model.paginate({}, { page: 3, limit: 10 }, function(err, result) {

    // result.docs

    // result.total

    // result.limit - 10

    // result.page - 3

    // result.pages

    });

    Or you can do the same with offset and limit:

    Model.paginate({}, { offset: 20, limit: 10 }, function(err, result) {

    // result.docs

    // result.total

    // result.limit - 10

    // result.offset - 20

    });

    With promise:

    Model.paginate({}, { offset: 20, limit: 10 }).then(function(result) {

    // ...

    });

    More advanced example

    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) {

    // ...

    });

    Zero limit

    You can use limit=0 to get only metadata:

    Model.paginate({}, { offset: 100, limit: 0 }).then(function(result) {

    // result.docs - empty array

    // result.total

    // result.limit - 0

    // result.offset - 100

    });

    Set custom default options for all queries

    config.js:

    var mongoosePaginate = require('mongoose-paginate');

     

    mongoosePaginate.paginate.options = {

    lean: true,

    limit: 20

    };

    controller.js:

    Model.paginate().then(function(result) {

    // result.docs - array of plain javascript objects

    // result.limit - 20

    });

    Tests

    npm install

    npm test

  • 相关阅读:
    python 包与模块
    互斥锁与自旋锁
    TCP三次握手四次挥手
    缓存击穿、缓存穿透、缓存雪崩
    五种IO模型
    MySQL使用mysqldump进行数据备份
    golang数据库连接池参数设置
    golang代码文件目录组织、包目录组织学习笔记
    【转】如何用Vim提高开发效率
    emacs显示行号
  • 原文地址:https://www.cnblogs.com/time-is-life/p/7776771.html
Copyright © 2011-2022 走看看