docs: function paginate(q, options, callback) {
    /*jshint validthis:true */
    var query, skipFrom, sort, columns, populate, lean, model = this;
    columns = options.columns || null;
    sort = options.sort || options.sortBy || null; // TODO: get rid of sortBy in major version
    populate = options.populate || null;
    var lean = options.lean || false;
    var pageNumber = options.page || 1;
    var resultsPerPage = options.limit || 10;
    skipFrom = (pageNumber * resultsPerPage) - resultsPerPage;
    query = model.find(q);
    if (columns !== null) {
      query = query.select(options.columns);
    }
    query = query.skip(skipFrom).limit(resultsPerPage);
    if (sort !== null) {
      query.sort(sort);
    }
    if (populate) {
      if (Array.isArray(populate)) {
        populate.forEach(function(field) {
          query = query.populate(field);
        });
      } else {
        query = query.populate(populate);
      }
    }
    if (lean) {
      query.lean();
    }
  
    if (typeof callback === 'function') {
      return handleCallback(query, q, model, resultsPerPage, callback);
    } else {
      return handlePromise(query, q, model, resultsPerPage);
    }
  }