node.js基于mongodb的搜索分页示例


Posted in Javascript onJanuary 22, 2017

mongodb模糊查询并分页

1.建立数据库

代码如下:

var mongoose = require('mongoose');
var shortid = require('shortid');
var Schema = mongoose.Schema;

var IndexDataSchema = new Schema({
  _id: {
    type: String,
    unique: true,
    'default': shortid.generate
  },
  type: String,
  city: String,
  name:string,
  value: [{name: String, value: String}],
  create: {type: Date, default: Date.now},
  expand: String
});

IndexDataSchema.statics = {
  defaultSort: {'create': 1},
  defaultOptions: {'pageSize': 0}

};


var IndexData = mongoose.model('IndexData', IndexDataSchema);

module.exports = IndexData;

页面布局 这里只需要搜索框和搜索按钮,再点击按钮时,执行search()方法并发送请求

代码如下:

<div class="searchPart">
          <input type="text" class="form-control" id="txtSearch" placeholder="请输入项目名称">
          <button class="btn btn-success search_btn" onclick="search()">搜索</button>
        </div>
        <script>
  var paginObj;
  
  //设置每页显示页码
  var pageSize = 20; 
   
  //设置当前页码为1
  var currentPage = 1;
  
  var condition = {'city': currentCityId, 'name': ''}
  jQuery(document).ready(function () {
    refresh();
  });
  
 //获取查找条件
  function getCondition() {
    var name = $('#txtSearch').val();
    if (name && name.trim()) {
    // {'$regex': name, '$options': 'i'}}为模糊查询固定语法,name为参数
      condition = {'city': currentCityId, 'name': {'$regex': name, '$options': 'i'}};
    }
    else {
      condition = {'city': currentCityId}
    }
    return condition;
  }
  
   //刷新页面
  function refresh() {
  
  //查找内容
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })

//查找个数
    $.get('/Manage/listCount/projects', {'condition': condition}, function (result) {
      paginObj = new DataPagin(document.querySelector('.projects-list'), result.count, {
        'pageSize': pageSize,
        'changePageFun': rquestPageData
      });
    })
  }

//重新分页
  function rquestPageData(currentPage, callback) {
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })
    if (callback) {
      callback();
    }
  }

//改变页码,显示相应的内容
  function changePage(paginObj, index) {
    paginObj.setPageNumber(index);
  }

  function appendData(data) {
    //debugger;
    var list = $('.projects-list').children('tbody');
    list.html('');
    // 页面显示模板
    for (var i = 0; i < data.length; i++) {
    
      .........
      //此部分自己定义
      
   
    })
  }

 
   //点击搜索按钮执行该方法
  function search() {
    currentPage = 1;
    refresh();
  }


</script>

到数据库查找并返回相应内容

var formidable = require("formidable");
  var common = require('./common');
  var path = require("path");
  var fs = require('fs');
  var path = require('path');
  var guid = require('guid');
  var shortid = require('shortid');
  
  var AuctionHouse = require('./db/IndexData');


 var funs = {
  getList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var options = req.query;
    var sort = options.sort || mainObj.defaultSort;
    var pageSize = options.pageSize || mainObj.defaultOptions.pageSize;
    var currentPage = options.currentPage || 1;
    var condition = options.condition || {}
    
    //此部分为查找条件
    mainObj.find(condition).sort(sort).skip((currentPage - 1) * pageSize).limit(pageSize).exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json(common.returnData(true, docs));
    })
  },
  countList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var condition = req.query.condition || {}
    mainObj.find(condition).count().exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json({'count': docs});
    })
  },
  HandleEvent: function (collectionName, actionsName, req, res, next) {
    var mainFuns = getCollctionFuns(collectionName)
    if (!mainFuns) {
      next();
    }
    var fun = mainFuns[actionsName];
    if (!fun) {
      next();
    }
    fun(req, res, next);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript定义类和对象的方法
Nov 26 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
JavaScript提高加载和执行效率的方法
Feb 03 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 Javascript
vue打包时去掉所有的console.log
Apr 10 Vue.js
利用JS实现文字的聚合动画效果
Jan 22 #Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
Vue.js学习之过滤器详解
Jan 22 #Javascript
You might like
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php分页函数示例代码分享
2014/02/24 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
php中数组最简单的使用方法
2020/12/27 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue实现通讯录功能
2018/07/14 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
七年级音乐教学反思
2014/01/26 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
2014年售票员工作总结
2014/11/19 职场文书
中班教师个人总结
2015/02/05 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
小学教代会开幕词
2016/03/04 职场文书
2019个人工作总结
2019/06/21 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP